MySQL: टेबल से संबंधित विदेशी कुंजियों की जांच कैसे करें


43

MySql में टेबल से संबंधित विदेशी कुंजियाँ कैसे देखें?

पृष्ठभूमि : मैं MySql में एक टेबल छोड़ना चाहता था जिसमें एक विदेशी कुंजी बाधा है। जब मैं इसे करता हूं तो मुझे यह मिलता है:

Error Code: 1217. Cannot delete or update a parent row: a foreign key constraint fails

मैं दूसरों को छोड़ने वाली तालिका से संबंधित विदेशी कुंजियों को कैसे छोड़ सकता हूं।

जवाबों:


55

सबसे पहले, FOREIGN KEYइस तरह से अपने बाधा नाम का पता लगाएं :

SELECT
  TABLE_NAME,
  COLUMN_NAME,
  CONSTRAINT_NAME,   -- <<-- the one you want! 
  REFERENCED_TABLE_NAME,
  REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
  REFERENCED_TABLE_NAME = 'My_Table';

और फिर आप निम्नलिखित तरीके से नामित बाधा को हटा सकते हैं:

ALTER TABLE My_Table DROP FOREIGN KEY My_Table_Constraint;

संदर्भ: 1 और 2

जैसा कि टिप्पणियों में @SteffenWinkler द्वारा सुझाया गया है, अगर अलग-अलग स्कीमा / डेटाबेस में उस नाम की एक से अधिक तालिका है, तो आप अपने क्लॉज में एक और विधेय जोड़ सकते हैं:

AND TABLE_SCHEMA = 'My_Database';

1
संपादित करने के लिए धन्यवाद - मैं आपके प्रश्न को + 1 'से बदल दूंगा! :-)
शाम

16
इसके अलावा, SHOW CREATE TABLE My_Table;
रिक जेम्स

2
@RickJames जो केवल अन्य तालिकाओं पर अड़चन दिखाता My_Tableहै। प्रश्न My_Tableउस अन्य तालिकाओं पर बाधाओं के लिए पूछता है।
एडीटीसी

2
केवल इस पर नज़र रखने वाले लोगों के लिए: यह कथन पूरे डेटाबेस सर्वर में निर्दिष्ट नाम से एक तालिका को संदर्भित करने वाली सभी बाधाओं को सूचीबद्ध करेगा। इसे प्रासंगिक डेटाबेस में जोड़कर सीमित करेंAND TABLE_SCHEMA = 'My_Database';
Steffen Winkler

3

उपरोक्त क्वेरी संपादित की गई। संदर्भित तालिका के नाम के रूप में तालिका नाम में परिवर्तित तालिका नाम वह तालिका है जिसे संदर्भित किया जा रहा है और इसलिए मूल क्वेरी का परिणाम आपको अपनी मेज पर विदेशी कुंजी नहीं दिखाएगा।

SELECT
  TABLE_NAME,
  COLUMN_NAME,
  CONSTRAINT_NAME,   -- <<-- the one you want! 
  REFERENCED_TABLE_NAME,
  REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
  Table_name = 'case_qualitycontrolcase' and constraint_name = f
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.