列出给定表的主键、外键约束
需求描述
需求:查询出给定的表emp的外键约束信息。
解决方法:通过各个数据库里提供的与外键约束相关的数据字典进行查询。
注: 数据库数据集SQL脚本详见如下链接地址
员工表结构和数据初始化SQL脚本
SQL代码
-- Sql Server:
SELECT a.table_name,
a.CONSTRAINT_NAME,
b.COLUMN_NAME,
a.CONSTRAINT_TYPE
FROM information_schema.table_constraints a,
information_schema.key_column_usage b
WHERE a.table_name = 'EMP'
-- AND a.table_schema ='SHENL'
AND a.table_name = b.table_name
AND a.table_schema = b.table_schema
AND a.constraint_name = b.constraint_name
执行结果
-- 如果只是查主键信息可以:
SELECT
tab.name AS table_name,
idx.name AS pk_name,
col.name AS column_name
FROM
sys.indexes idx
JOIN sys.index_columns idxCol
ON idx.object_id = idxCol.object_id
AND idx.index_id = idxCol.index_id
AND idx.is_primary_key = 1
JOIN sys.tables tab
ON idx.object_id = tab.object_id
JOIN sys.columns col
ON idx.object_id = col.object_id
AND idxCol.column_id = col.column_id
AND tab.name = 'EMP'
注:
1 如果想查唯一约束可以将上述高亮处修改为:AND idx.is_unique_constraint = 1。
2 默认情况下会在基于主键建立个索引。
3 这里说的主外键约束对应constraint,一般包括PK、FK、UK即主键、外键、唯一键。而约束一般指的是default、check即默认值约束、检查约束。
-- Mysql:
SELECT CONSTRAINT_NAME,TABLE_NAME,COLUMN_NAME,
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA='SHENL'
AND TABLE_NAME IN('emp')
-- Oracle:
SELECT A.CONSTRAINT_NAME,A.TABLE_NAME,A.COLUMN_NAME,B.CONSTRAINT_TYPE
FROM USER_CONS_COLUMNS A, USER_CONSTRAINTS B
WHERE A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
AND B.CONSTRAINT_TYPE IN('P','R')
AND A.TABLE_NAME = 'EMP'