这篇文章主要介绍了一种数据库系统查询表引用或被引用的外键操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
今天更新两个SQL。是用来查询宜在家长指导下观看的中,主表被子表引用的外键,或子表引用了哪个主表的主键。
废话不多说,直接上实验!
CentOS 7 PG 10
创建两个实验表,test01为主表,test02为子表,test02引用测试01中的自我列。
test=# create table test01(
测试(# id int主键,
测试(# col1 varchar(20)
测试(#);
创建表格
test=# create table test02(
测试(# id int主键,
测试(# test01_id int引用test01(id),
测试(# col1 varchar(20)
测试(#);
创建表格
插入数据
测试=#插入测试01值(1,‘a’);
插入0 1
测试=#插入测试01值(2,‘b’);
插入0 1
测试=#插入测试01值(3,‘c’);
插入0 1
测试=#插入测试02值(1,1,' a ');
插入0 1
测试=#插入测试02值(2,1,' a ');
插入0 1
测试=#插入测试02值(3,1,' a ');
插入0 1
测试=#插入测试02值(4,2,' b ');
插入0 1
测试=#插入测试02值(5,2,' b ');
插入0 1
测试=#插入测试02值(6,11,' b ');
错误:在表测试02 '上插入或更新违反了外键约束' test02_test01_id_fkey '
详细信息:键(test01_id)=(11)不在表" test01 "中。
查询主表被哪个子表引用。如果结果为空,说明没有任何子表引用的该表。
测试=# SELECT
tc.constraint_name,
tc.table_name,#子表
kcu.column_name,
CCU。表名为外来表名,#主表
CCU。列名为外键列名,
tc.is _延期,
TC。初始交货(_ d)
从
信息_模式。表_约束
JOIN information _ schema。键_列_用法AS kcu ON TC。constraint _ name=kcu。约束名称
JOIN information _ schema。约束_列_用法作为CCU在CCU上。constraint _ name=TC。约束名称
其中约束类型='外键'和CCU。table _ name=' test 01# 输入主表
constraint _ name | table _ name | column _ name | foreign _ table _ name | foreign _ column _ name | is _ delivered | initial _ delivered
- - - - - - -
测试02 _ test 01 _ id _ fkey |测试02 | tes唐山百度排名t01_id | test01 | id | NO | NO
(1行)
查询子表引用的哪个主表。如果结果为空,说明没有任何引用主表。
测试=# SELECT
tc.constraint_name,