MySQL डाटाबेस से बाधाओं की सूची


91

मुझे किसी विशेष डेटाबेस से सभी बाधाओं की एक सूची कैसे मिल सकती है?


1
MySQL में एक से अधिक प्रकार की बाधाएँ हैं। आपका क्या मतलब है? क्या आप उस चीज़ का उदाहरण दे सकते हैं जिसे आप खोज रहे हैं?
मार्क बायर्स

जवाबों:


141

information_schema.table_constraintsप्रत्येक तालिका पर परिभाषित बाधाओं के नाम प्राप्त करने के लिए तालिका का उपयोग करें :

select *
from information_schema.table_constraints
where constraint_schema = 'YOUR_DB'

information_schema.key_column_usageउन बाधाओं में से प्रत्येक में फ़ील्ड प्राप्त करने के लिए तालिका का उपयोग करें :

select *
from information_schema.key_column_usage
where constraint_schema = 'YOUR_DB'

यदि इसके बजाय आप विदेशी प्रमुख बाधाओं के बारे में बात कर रहे हैं, तो उपयोग करें information_schema.referential_constraints:

select *
from information_schema.referential_constraints
where constraint_schema = 'YOUR_DB'

1
इस सूची में केवल UNIQUE, PRIMARY KEY या FOREIGN KEY बाधाएं शामिल होंगी। चेक संभव है, लेकिन लागू नहीं किया गया है। इस क्वेरी का उपयोग करते हुए DEFAULT बाधाएँ दिखाई नहीं देंगी।
OMG पॉन्इज

MySQL CHECK बाधाओं को संग्रहीत नहीं करता है। यदि आप एक को परिभाषित करने की कोशिश करते हैं, तो यह पार्स करता है और चुपचाप इसे त्याग देता है।
बिल कारविन

1
DEFAULT मान एक बाधा के रूप में नहीं गिना जाता है। इसमें संग्रहित है information_schema.columns.column_default
बिल कारविन

22

@Senseful द्वारा शानदार जवाब।

मैं उन लोगों के लिए संशोधित क्वेरी पेश कर रहा हूं जो केवल बाधा नामों की सूची देख रहे हैं (और अन्य विवरण / कॉलम नहीं):

SELECT DISTINCT(constraint_name) 
FROM information_schema.table_constraints 
WHERE constraint_schema = 'YOUR_DB' 
ORDER BY constraint_name ASC;

2
अगर आपको इसे ढूंढने के बाद एक बार हटाना
पड़े

9

यह वास्तव में मदद करता है अगर आप प्राथमिक और विदेशी कुंजी बाधाओं के साथ-साथ उन बाधाओं जैसे ON_UPDATE और ON_DELETE और स्तंभ और विदेशी स्तंभ नाम सभी को एक साथ देखना चाहते हैं:

SELECT tc.constraint_schema,tc.constraint_name,tc.table_name,tc.constraint_type,kcu.table_name,kcu.column_name,kcu.referenced_table_name,kcu.referenced_column_name,rc.update_rule,rc.delete_rule

FROM information_schema.table_constraints tc

inner JOIN information_schema.key_column_usage kcu
ON tc.constraint_catalog = kcu.constraint_catalog
AND tc.constraint_schema = kcu.constraint_schema
AND tc.constraint_name = kcu.constraint_name
AND tc.table_name = kcu.table_name

LEFT JOIN information_schema.referential_constraints rc
ON tc.constraint_catalog = rc.constraint_catalog
AND tc.constraint_schema = rc.constraint_schema
AND tc.constraint_name = rc.constraint_name
AND tc.table_name = rc.table_name

WHERE tc.constraint_schema = 'my_db_name'

आप उन स्तंभों के बारे में कुछ और जानकारी जोड़ना चाहते हैं, बस इसे SQL में जोड़ सकते हैं (और इच्छित कॉलम चुनें):

LEFT JOIN information_schema.COLUMNS c
ON kcu.constraint_schema = c.table_schema
AND kcu.table_name = c.table_name
AND kcu.column_name = c.column_name

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