Как мне получить список всех ограничений из конкретной базы данных?
mysql
database-design
constraints
лоладжл
источник
источник
Ответы:
Используйте
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 (и выберите нужные столбцы):
источник
ВЫБЕРИТЕ * ОТ USER_CONSTRAINTS, ГДЕ TABLE_NAME = "tabnam";
источник