Sen*_*ful 129
使用该information_schema.table_constraints表获取每个表上定义的约束的名称:
select *
from information_schema.table_constraints
where constraint_schema = 'YOUR_DB'
Run Code Online (Sandbox Code Playgroud)
使用该information_schema.key_column_usage表来获取每个约束中的字段:
select *
from information_schema.key_column_usage
where constraint_schema = 'YOUR_DB'
Run Code Online (Sandbox Code Playgroud)
如果您正在谈论外键约束,请使用information_schema.referential_constraints:
select *
from information_schema.referential_constraints
where constraint_schema = 'YOUR_DB'
Run Code Online (Sandbox Code Playgroud)
Har*_*.V. 20
@Senseful给出了很好的答案.
我正在为那些只寻找约束名列表(而不是其他细节/列)的人提出修改后的查询:
SELECT DISTINCT(constraint_name)
FROM information_schema.table_constraints
WHERE constraint_schema = 'YOUR_DB'
ORDER BY constraint_name ASC;
Run Code Online (Sandbox Code Playgroud)
fri*_*108 10
如果您想查看主键和外键约束以及围绕这些约束的规则,例如 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'
Run Code Online (Sandbox Code Playgroud)
您甚至可能想要添加有关这些列的更多信息,只需将其添加到 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
74600 次 |
| 最近记录: |