IF EXISTS(
SELECT *
FROM INFORMATION_SCHEMA.STATISTICS
WHERE INDEX_SCHEMA = DATABASE()
AND TABLE_NAME='myTable'
AND INDEX_NAME = 'myIndex')
THEN
ALTER TABLE `myTable` DROP FOREIGN KEY `myForeignKey`;
ALTER TABLE `myTable` DROP INDEX `myIndex` ;
END IF;
जब आप एक विदेशी कुंजी बाधा बनाने के लिए, mysql स्वचालित रूप से संदर्भित स्तंभ पर एक सूचकांक पैदा करेगा। उपरोक्त उदाहरण से पता चलता है कि INFORMATION_SCHEMA में किसी इंडेक्स की जांच कैसे करें, लेकिन information schema में चेक आउट करने के लिए आपके लिए बहुत अधिक जानकारी है। आपका इंडेक्स नाम इंगित करता है कि यह एक एफके के लिए बनाया गया था, इसलिए आपको पहले एफके छोड़ना होगा, फिर इंडेक्स ड्रॉप करना होगा। यदि आप फिर से विदेशी कुंजी बनाते हैं, तो MySQL फिर से अनुक्रमणिका बनायेगा। टेबल स्कैन किए बिना संदर्भित अखंडता को लागू करने के लिए इसे एक सूचकांक की आवश्यकता होती है।
यदि आपका इरादा एक नया सूचकांक बनाना था जिसमें एक ही कॉलम है, तो आपको पहले उस इंडेक्स को बनाना होगा (इस कॉलम के साथ, जिसे एफके के रूप में उपयोग किया जाएगा, जो सूची में पहला है सूचकांक के लिए निर्दिष्ट कॉलम)। अब आप अपना एफके बैक जोड़ सकते हैं और mysql किसी अन्य को बनाये बिना नई अनुक्रमणिका का उपयोग करने में प्रसन्न होंगे।
संपादित करें: इंडेक्स को तुरंत देखने के लिए myTable से SHOW INDEXES को निष्पादित करें;
Am MySQL का उपयोग कर, मैं जहाँ भी मैं कर सकता यह अगर मौजूद है डाल करने के लिए कोशिश की है। यह जांचने से पहले कि विदेशी कुंजी मौजूद है या नहीं? – Creditto
आप कौन सा mysql स्टोरेज इंजन उपयोग कर रहे हैं? MYISAM या INNODB ?? आप सुनिश्चित हैं कि आप MYISAM का उपयोग नहीं कर रहे हैं? –
AM mysql में INNODB स्टोरेज इंजन का उपयोग करके, मैंने इसे कहीं भी स्थापित करने की कोशिश की है जहां भी मैं कर सकता हूं। यह जांचने से पहले कि विदेशी कुंजी मौजूद है या नहीं? – Creditto