मुझे किसी विशेष डेटाबेस से सभी बाधाओं की एक सूची कैसे मिल सकती है?
जवाबों:
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'
information_schema.columns.column_default
।
@Senseful द्वारा शानदार जवाब।
मैं उन लोगों के लिए संशोधित क्वेरी पेश कर रहा हूं जो केवल बाधा नामों की सूची देख रहे हैं (और अन्य विवरण / कॉलम नहीं):
SELECT DISTINCT(constraint_name)
FROM information_schema.table_constraints
WHERE constraint_schema = 'YOUR_DB'
ORDER BY constraint_name ASC;
यह वास्तव में मदद करता है अगर आप प्राथमिक और विदेशी कुंजी बाधाओं के साथ-साथ उन बाधाओं जैसे 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
USER_CONSTRAINTS से * TABLE_NAME = "tabnam" का चयन करें;