SQL 列举非索引外键,你想列出模式中某个表的约束,以及与这些约束相关的列。例如,你希望找出 EMP
表的约束及相关的列。
SQL 列举约束 问题描述
你想列出模式中某个表的约束,以及与这些约束相关的列。例如,你希望找出 EMP
表的约束及相关的列。
SQL 列举约束 解决方案
DB2
查询 SYSCAT.TABCONST
和 SYSCAT.COLUMNS
。
1 select a.tabname, a.constname, b.colname, a.type
2 from syscat.tabconst a,
3 syscat.columns b
4 where a.tabname = 'EMP'
5 and a.tabschema = 'SMEAGOL'
6 and a.tabname = b.tabname
7 and a.tabschema = b.tabschema
Oracle
查询 SYS.ALL_CONSTRAINTS
和 SYS.ALL_CONS_COLUMNS
。
1 select a.table_name,
2 a.constraint_name,
3 b.column_name,
4 a.constraint_type
5 from all_constraints a,
6 all_cons_columns b
7 where a.table_name = 'EMP'
8 and a.owner = 'SMEAGOL'
9 and a.table_name = b.table_name
10 and a.owner = b.owner
11 and a.constraint_name = b.constraint_name
PostgreSQL、MySQL 和 SQL Server
查询 INFORMATION_SCHEMA.TABLE_CONSTRAINTS
和 INFORMATION_SCHEMA.KEY_COLUMN_USAGE
。
1 select a.table_name,
2 a.constraint_name,
3 b.column_name,
4 a.constraint_type
5 from information_schema.table_constraints a,
6 information_schema.key_column_usage b
7 where a.table_name = 'EMP'
8 and a.table_schem = 'SMEAGOL'
9 and a.table_name = b.table_name
10 and a.table_schema = b.table_schema
11 and a.constraint_name = b.constraint_name
SQL 列举约束 扩展知识
毋庸置疑,约束是关系数据库的重要组成部分,我们甚至不需要解释为什么要列出一个表的约束。出于多个原因,列出一个表的约束是非常有用的。你可能希望找出那些没有主键的表,也可能想知道有哪些列应该被设置为外键却没有这么做(例如,子表的数据不同于父表,你希望知道这是怎么发生的),或者你可能希望了解检查约束。(一些列可以为 Null
吗?它们必须满足某些条件吗?)