# 1025 - ame।


81

इसलिए मैं अपने डेटाबेस में एक टेबल पर एक प्राथमिक कुंजी जोड़ने की कोशिश कर रहा हूं। अभी इसके पास एक प्राथमिक कुंजी है जैसे:

PRIMARY KEY (user_id, round_number)

जहाँ user_id एक विदेशी कुंजी है।

मैं इसे इसे बदलने की कोशिश कर रहा हूं:

PRIMARY KEY (user_id, round_number, created_at)

मैं तालिका संरचना दृश्य में प्राथमिक कुंजी आइकन पर क्लिक करके phpmyadmin में ऐसा कर रहा हूं।

यह मुझे मिलने वाली त्रुटि है:

#1025 - Error on rename of './database/#sql-2e0f_1254ba7' to './database/table' (errno: 150)

यह InnoDB टेबल इंजन के साथ एक MySQL डेटाबेस है।


1
Google का उपयोग करके एक त्वरित खोज मुझे यह विचार देती है कि यह समस्या बाधाओं से संबंधित है। संभावित उपयोगी लिंक: dev.mysql.com/doc/refman/5.0/en/innodb-error-codes.html और simplicidade.org/notes/archives/2008/03/mysql_errno_150.html
Lekensteyn

जवाबों:


139

एक मुख्य कुंजी के साथ संभवतः एक और तालिका है जिसमें आप जिस प्राथमिक कुंजी को बदलने की कोशिश कर रहे हैं।

यह पता लगाने के लिए कि किस तालिका में त्रुटि हुई है जिसे आप चला सकते हैं SHOW ENGINE INNODB STATUSऔर फिर LATEST FOREIGN KEY ERRORअनुभाग देखें।


2
मेरे मामले में, डेटाबेस नया बनाया गया था, जिसमें कोई तालिका नहीं थी।
गुइलेरमे फेरेरा

33

जैसा कि कहा गया था कि आपको पहले एफके को हटाने की जरूरत है। माईस्क्ल पर इसे इस तरह करें:

ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;

ALTER TABLE `table_name` DROP INDEX `id_name_fk`;

1
आपके जवाब ने वास्तव में मेरी मदद की। DROP FOREIGN KEY ने समस्या हल कर दी। धन्यवाद
राम बाबू एस

1
इससे मेरी समस्या भी हल हो गई, लेकिन वही स्क्रिप्ट मेरे विकास MySQL पर काम कर रही थी। क्या यह ऐसी चीज है जो MySQL के संस्करण में बदल गई है?
बैंकरेल वैलेंटाइन

24

उन लोगों के लिए जो इस प्रश्न को Google के माध्यम से प्राप्त कर रहे हैं ... यह त्रुटि तब भी हो सकती है यदि आप एक फ़ील्ड का नाम बदलने की कोशिश करते हैं जो एक विदेशी कुंजी के रूप में काम कर रहा है।


13

PHPMyAdmin में या MySQL के साथ इसे दरकिनार करने के लिए, विशेषता का नाम बदलने से पहले विदेशी कुंजी बाधा को हटा दें।

(PHPMyAdmin उपयोगकर्ताओं के लिए: PHPMyAdmin में FK की कमी को दूर करने के लिए, विशेषता का चयन करें और फिर तालिका संरचना के नीचे टूलबार में "प्रिंट दृश्य" के आगे "संबंध देखें" पर क्लिक करें)


1
मुझे लगता है कि यह सबसे सटीक उत्तर है
मॉन्ट्रियल

4

यदि आप किसी स्तंभ को हटाने का प्रयास कर रहे हैं जो कि एक महत्वपूर्ण कुंजी है, तो आपको सही नाम खोजना होगा जो स्तंभ नाम नहीं है। उदाहरण: यदि मैं अलारम्स तालिका में सर्वर फ़ील्ड को हटाने का प्रयास कर रहा हूं जो सर्वर तालिका के लिए एक विदेशी कुंजी है।

  1. SHOW CREATE TABLE alarm;CONSTRAINT `server_id_refs_id_34554433` FORIEGN KEY (`server_id`) REFERENCES `server` (`id`)लाइन के लिए देखो ।
  2. ALTER TABLE `alarm` DROP FOREIGN KEY `server_id_refs_id_34554433`;
  3. ALTER TABLE `alarm` DROP `server_id`

यह विदेशी कुंजी सर्वर को अलार्म तालिका से हटा देगा।


4

मुझे यह समस्या थी, यह विदेशी-कुंजी के लिए है

Relation View(नीचे दी गई छवि की तरह) पर क्लिक करें, फिर उस फ़ील्ड का नाम ढूंढें जिसे आप इसे हटाने जा रहे हैं, और Foreign key constraint (INNODB)कॉलम के नीचे , बस कुछ भी नहीं चुनें! कोई विदेशी कुंजी का मतलब है

यहाँ छवि विवरण दर्ज करें

आशा है कि काम करता है!


0

यदि आप एक विदेशी कुंजी जोड़ रहे हैं और इस त्रुटि का सामना कर रहे हैं, तो यह हो सकता है कि बच्चे की तालिका में मूल तालिका में मौजूद नहीं है।

मान लें कि जिस कॉलम में विदेशी कुंजी को जोड़ना है, उसमें सभी मान 0 पर सेट हैं और मान उस तालिका में उपलब्ध नहीं है जिसे आप इसे संदर्भित कर रहे हैं।

आप कुछ मान सेट कर सकते हैं जो मूल तालिका में मौजूद हैं और फिर मेरे लिए काम की गई विदेशी कुंजी को जोड़ सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.