Як отримати список усіх обмежень з певної бази даних?
Відповіді:
Використовуйте 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