2012-07-25 19 views
11

मैं का उपयोग कर विदेशी कुंजी के एक नंबर छोड़ने के लिए कोशिश कर रहा हूँ:MySQL ड्रॉप विदेशी कुंजी त्रुटि 152

ALTER TABLE `table` DROP FOREIGN KEY `fk_table_users1` , DROP FOREIGN KEY `fk_table_accounts1` , DROP FOREIGN KEY `fk_table_data1` ; 

लेकिन यह त्रुटि देता है:

Error on rename of './db/table' to './db/#sql2-179c-288289' (errno: 152) 

मैं SHOW ENGINE INNODB STATUS चलाने जो कहते हैं:

120725 12:38:37 Error in dropping of a foreign key constraint of table db/table, 
in SQL command 
ALTER TABLE `table` DROP FOREIGN KEY `fk_table_users1` , DROP FOREIGN KEY `fk_table_accounts1` , DROP FOREIGN KEY `fk_table_data1` 
Cannot find a constraint with the given id fk_table_users1. 

SHOW CREATE TABLE 'table' आउटपुट:

CREATE TABLE `table` (
`id` int(11) NOT NULL auto_increment, 
`data_id` int(11) NOT NULL, 
`account_id` int(11) NOT NULL, 
`status` enum('pending','complete') NOT NULL default 'pending', 
`created_at` datetime NOT NULL, 
`created_by` int(11) NOT NULL, 
PRIMARY KEY (`id`), 
KEY `fk_orders_users1` (`created_by`), 
KEY `fk_orders_data1` (`data_id`), 
KEY `fk_orders_accounts1` (`account_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

हालांकि जब मैं phpmyadmin के माध्यम से संरचना को देखता हूं तो यह उसी नाम के साथ विदेशी कुंजी सूचीबद्ध करता है। क्या मैं विदेशी कुंजी छोड़ने से पहले कुछ और करने की ज़रूरत है?

+0

कृपया '' SHOW CREATE तालिका तालिका 'का आउटपुट पोस्ट करें; ''। – eggyal

+0

@eggyal ने आउटपुट – xylar

+3

के साथ अपनी पोस्ट संपादित की है, मुझे * किसी भी * विदेशी कुंजी बाधाओं को नहीं देखा जाता है ... – eggyal

उत्तर

10

कोई विदेशी कुंजी नहीं है। देखें MySQL documentation जो कहते हैं

KEY is normally a synonym for INDEX. 

तो मूल रूप से तालिका आप अनुक्रमित नहीं विदेशी कुंजी बनाया है में। For Foreign Key info, Click here

+0

नहीं जोड़ा एक छोटा लेकिन संभवतः अच्छा: मुझे यह समस्या थी। इस उत्तर का उपयोग करके मैंने स्वयं को दोबारा जांच लिया और देखा कि मैंने बाधा के लिए आवश्यक कुंजी को हटाने का प्रयास किया है। कुंजी नाम से नाम को बाधा नाम में बदलने के लिए 'ड्रॉप' कथन में एक छोटा फिक्स - और violla! –

0

पहले ड्रॉप विदेशी कुंजी तो स्तंभ

बदलने की मेज 'तालिका नाम' ड्रॉप विदेशी कुंजी 'बाधा आईडी हटाना;

यदि आप नहीं जानते कि बाधा आईडी कि बाधा आईडी में डेटाबेस डंप बनाने डंप फ़ाइल में उपलब्ध है ..

फिर स्तंभ हटाएं ..

0

सूचकांक नाम और बाधा नाम ही नहीं हो सकता। कोड का उपयोग करके आपको पहले बाधा को हटा देना चाहिए: ALTER TABLE tablename DROP FOREIGN KEY constraintname

2

आपको अस्थायी रूप से बाधा को छोड़ने की आवश्यकता है ताकि आप इसे हटा सकें।

सेट FOREIGN_KEY_CHECKS = 0;

और फिर आप विदेशी कुंजी ड्रॉप के बाद फिर से उन्हें चालू:

सेट FOREIGN_KEY_CHECKS = 0;

+0

आप शायद अंतिम पंक्ति में '= 1' का मतलब है;) – BusyAnt

संबंधित मुद्दे