24

मैं अपनी तालिका में विदेशी कुंजी ड्रॉप लेकिन यह त्रुटि संदेशविदेशी कुंजी बाधा नाम

mysql> alter table customers drop foreign key customerid; 
ERROR 1025 (HY000): Error on rename of '.\products\customers' to '.\products\#sql2-7ec-a3' (errno: 152) 
mysql> 
+1

यह आपको को समझने में मदद कर सकता है http://stackoverflow.com/questions/160233/what-does-mysql-error-1025-hy000-error-on-rename-of-foo-errorno-150-me – Imdad

+1

@Imdad यह लिंक एक और त्रुटि का वर्णन करता है - (errno: 150) – Devart

+0

इसे आज़माएं। नई तालिका बनाएं (विदेशी कुंजी बाधा के बिना)। डेटा को नई तालिका में कॉपी करें (new_table SELECT * पुराने_टेबल से वाक्यविन्यास INSERT का उपयोग करके) पुरानी तालिका – Imdad

उत्तर

6

विदेशी कुंजी ड्रॉप करने का प्रयास करते समय यह त्रुटि प्राप्त करने से बचने के लिए, विदेशी कुंजी के कॉलम नाम के बजाय बाधा नाम का उपयोग करें।

जब मैं करने की कोशिश की

mysql> ALTER TABLE mytable DROP PRIMARY KEY; 

मैं

ERROR 1025 (HY000): Error on rename of '.\database\#sql-454_3' to '.\database\mytable' (errno: 150). 

के रूप में त्रुटि मिली मैं का उपयोग कर इसे हल:

mysql> ALTER TABLE mytable DROP PRIMARY KEY, ADD PRIMARY KEY (column1,column2,column3); 

कुछ लिंक आप में मदद मिलेगी।

link 1

link 2 [देखो के लिए 21 जनवरी 2011 को 7 नवंबर 2008 17:09 & हेक्टर Delgadillo द्वारा पोस्ट पर एलेक्स ब्लूम द्वारा पोस्ट 4:57 बजे]

+0

मेरे लिए काम नहीं करते हैं। – user60627

+0

मेरे लिए काम किया था! धन्यवाद। – aizquier

1

एक विदेशी कुंजी ड्रॉप करने का प्रयास करते समय यह त्रुटि मिल रही से बचने के लिए में किया गया चाहते हैं, का उपयोग ड्रॉप करने में असमर्थ विदेशी कुंजी के कॉलम नाम के बजाय

7

यह MySQL की त्रुटि संदेश में एक बग जैसा दिखता है। (http://bugs.mysql.com/bug.php?id=10333)

उपयोग शो टेबल table_name बनाएं वास्तविक नाम विदेशी कुंजी के को देखने के लिए। ऐसा लगता है कि यह विदेशी कुंजी नाम की गलत वर्तनी के साथ क्वेरी उत्पन्न करते समय mysql क्वेरी ब्राउज़र समस्या हो सकती है।

+2

यह मुझे यह जानने में मदद करता है कि मेरी बाधा INDEX के रूप में बनाई गई थी, विदेशी कुंजी नहीं। तब मैंने "ड्रोप इंडेक्स" खंड का उपयोग किया। धन्यवाद। –

32

समाधान here by Chris White वर्णित मेरे लिए काम किया।

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

  1. तालिका तालिका_नाम बनाएं;

    SHOW CREATE TABLE `table_name`: 
    
    | table_name | CREATE TABLE `table_name` (
        `id` int(20) unsigned NOT NULL auto_increment, 
        `key_column` smallint(5) unsigned default '1', 
        KEY `column_tablein_26440ee6` (`key_column`), <--- shows key name 
        CONSTRAINT `table_name_ibfk_1` FOREIGN KEY (`key_column`) REFERENCES <--- shows foreign key constraint name 
    `second_table` (`id`) ON DELETE SET NULL 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | 
    
  2. विदेशी कुंजी बाधा हटाएँ:

    ALTER TABLE table_name DROP FOREIGN KEY `table_name_ibfk_1`; 
    
  3. कुंजी

    ALTER TABLE table_name DROP KEY `column_tablein_26440ee6`; 
    

कि यह मेरे लिए किया था हटाएँ।

+1

+1 यह जोड़ना चाहते हैं कि इसके कई प्रश्न (शायद डुप्लिकेट) हैं, और @bbrame द्वारा उत्तर वह है जो मेरे लिए काम करता है। –

+0

मेरे पास शो 'टेबल' बनाने में बाधा अनुभाग नहीं है, लेकिन जब मैं desc 'name' करता हूं तो मैं फ़ील्ड को विदेशी कुंजी बाधा रखने के लिए देख सकता हूं – proprius

+0

यह एक आदर्श उदाहरण है जो दिखाता है कि विदेशी कुंजी ड्रॉप से ​​कैसे निपटें। @bbframe के लिए बहुत से धन्यवाद .it मेरे लिए काम किया। – prashant

0

आपको विदेशी कुंजी नाम के साथ प्रयास करना चाहिए क्योंकि फहीम पार्कर ने सुझाव दिया था। असल में यह हमेशा काम नहीं करता है।

मेरे मामले में मैं निर्माण से FK जोड़ने के लिए

FOREIGN KEY `fk`(`col1`) REFERENCES `table2`(`col1`) 

कोड का इस्तेमाल किया।

इस कोड के साथ समस्या यह मान्य नहीं है और इसे किसी प्रकार की वाक्यविन्यास त्रुटि फेंकनी चाहिए, लेकिन फिर भी यह एक यादृच्छिक नाम के साथ एक विदेशी कुंजी जोड़ दी गई है।

जब मैं सही वाक्य रचना के साथ FK कहा:

CONSTRAINT `fk` FOREIGN KEY (`col1`) REFERENCES `table2`(`col1`) 

निम्नलिखित कोड यह ठीक से गिरा:

ALTER TABLE `table1` DROP FOREIGN KEY `fk` 

तो त्रुटि इस तरह का भी हो सकता है अगर आप एक विदेशी दूर करने की कोशिश एक अवैध नाम के साथ कुंजी।

SHOW CREATE TABLE `table1` 

के साथ तालिका गुणों को देखना महत्वपूर्ण है और यदि आपको इस तरह की त्रुटियां मिलती हैं तो विदेशी कुंजी नामों की जांच करें।