为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
【操作系统】:
【CPU】:
【问题描述】*:达梦数据库怎么查看所有外键
SELECT
fk.CONSTRAINT_NAME AS 外键名称,
fk.TABLE_NAME AS 外键表,
fk.COLUMN_NAME AS 外键列,
pk.TABLE_NAME AS 主键表,
pk.COLUMN_NAME AS 主键列
FROM
(SELECT
a.CONSTRAINT_NAME,
a.TABLE_NAME,
b.COLUMN_NAME
FROM
DBA_CONSTRAINTS a
JOIN DBA_CONS_COLUMNS b ON a.CONSTRAINT_NAME = b.CONSTRAINT_NAME
WHERE
a.CONSTRAINT_TYPE = 'R') fk
JOIN
(SELECT
a.CONSTRAINT_NAME,
a.TABLE_NAME,
b.COLUMN_NAME
FROM
DBA_CONSTRAINTS a
JOIN DBA_CONS_COLUMNS b ON a.CONSTRAINT_NAME = b.CONSTRAINT_NAME
WHERE
a.CONSTRAINT_TYPE = 'P') pk
ON fk.CONSTRAINT_NAME = pk.CONSTRAINT_NAME;
可以看到所有外键
SELECT a.table_name, a.column_name, a.constraint_name, c.owner,
c.r_owner, c_pk.table_name r_table_name, c_pk.constraint_name r_pk
FROM all_cons_columns a
JOIN all_constraints c ON a.owner = c.owner
AND a.constraint_name = c.constraint_name
JOIN all_constraints c_pk ON c.r_owner = c_pk.owner
AND c.r_constraint_name = c_pk.constraint_name
WHERE c.constraint_type = 'R'
如果要批量禁用/启用所有用户模式外键,可以参考如下口令
select 'alter table '||owner||'.'||table_name||' disable constraint '||constraint_name||'; '
from sys.dba_constraints where owner not like 'SYS%' and constraint_type='R';
为了查看所有外键,可以通过联合查询DBA_CONSTRAINTS和DBA_CONS_COLUMNS视图。以下是一个常用的查询示例:
SELECT c.constraint_name, c.table_name AS child_table, c.constraint_type, cc.column_name AS child_column, r.table_name AS referenced_table, rc.column_name AS referenced_column FROM dba_constraints c JOIN dba_cons_columns cc ON c.constraint_name = cc.constraint_name JOIN dba_constraints r ON c.r_constraint_name = r.constraint_name JOIN dba_cons_columns rc ON r.constraint_name = rc.constraint_name WHERE c.constraint_type = 'R'; -- 'R' stands for Foreign Key constraint
解释:
c.constraint_name: 外键约束的名称。
c.table_name (子表): 外键所在的子表(即引用其他表的表)。
cc.column_name (子表列): 外键所在的列(即引用父表的列)。
r.table_name (父表): 被引用的父表。
rc.column_name (父表列): 父表中的主键列(被子表引用的列)。
c.constraint_type = 'R': R表示外键约束(Referential integrity constraint)。
结果:
这个查询将返回所有外键约束的详细信息,包括外键约束名称、子表和父表的名称,以及它们各自的相关列。