本文共 2614 字,大约阅读时间需要 8 分钟。
1.参照完整性
参照完整性主要是定义外码,将一个关系的主码放在另一个关系中,作为该关系的属性,就称其为外码。外码的取值有两种情况,一种为空,另外一种就是被参照表的主码的域。
2.实例
1.创建表时定义参照完整性①先定义nation3的实体完整性,再定义supplier3在nation3上的列级参照完整性CREATE TABLE nation3(/*国家表*/ nationkey INTEGER PRIMARY KEY, /*国家编号*/ name CHAR(25), /*国家名称*/ regionkey INTEGER, /*地区编号*/ comment VARCHAR(152) /*备注*/);CREATE TABLE supplier3(/*供应商基本表*/ suppkey INTEGER PRIMARY KEY, /*供应商编号*/ name CHAR(50), /*供应商名称*/ address VARCHAR(80), /*供应商地址*/ nation INTEGER REFERENCES nation3(nationkey),/*国家编号*/ phone CHAR(30), /*供应商电话*/ acctbal REAl, comment VARCHAR(101) /*备注*/);②先定义nation3的实体完整性,再定义supplier4在nation3上的表级参照完整性CREATE TABLE supplier4(/*供应商基本表*/ suppkey INTEGER PRIMARY KEY, /*供应商编号*/ name CHAR(50), /*供应商名称*/ address VARCHAR(80), /*供应商地址*/ nation INTEGER, /*国家编号*/ phone CHAR(30), /*供应商电话*/ acctbal REAl, comment VARCHAR(101), /*备注*/ CONSTRAINT nation_3 FOREIGN KEY(nation)REFERENCES nation3(nationkey));2.创建表后定义参照完整性CREATE TABLE nation4(/*国家表*/ nationkey INTEGER PRIMARY KEY, /*国家编号*/ name CHAR(25), /*国家名称*/ regionkey INTEGER, /*地区编号*/ comment VARCHAR(152) /*备注*/);ALTER TABLE nation4ADD CONSTRAINT regionkey_4FOREIGN KEY(regionkey)REFERENCES region(regionkey);3.外码由多个属性组成时定义参照完整性CREATE TABLE partsupp3(/*零件供应联系表*/ partkey INTEGER,/*零件编号*/ suppkey INTEGER,/*供应商编号*/ availqty INTEGER,/*可用数量*/ supplycost REAL,/*供应价格*/ comment VARCHAR(199),/*备注*/ PRIMARY KEY(partkey,suppkey),/*定义主码*/ FOREIGN KEY(partkey)REFERENCES part(partkey), FOREIGN KEY(suppkey)REFERENCES supplier(suppkey) );4.定义参照完整性的违约处理 CREATE TABLE customer3(/*顾客表*/ custkey INTEGER PRIMARY KEY,/*顾客编号*/ name VARCHAR(25),/*姓名*/ address VARCHAR(40),/*地址*/ nationkey INTEGER,/*国籍编号*/ phong CHAR(15),/*电话*/ acctbal CHAR(10),/*账户余额*/ mktsegment CHAR(10),/*市场分区*/ comment VARCHAR(117),/*备注*/ CONSTRAINT nationkey_3 FOREIGN KEY(nationkey)REFERENCES nation(nationkey) ON DELETE CASCADE ON UPDATE SET NULL );5.删除参照完整性ALTER TABLE nation4DROP CONSTRAINT regionkey_4;6.插入一条记录,验证参照完整性是否起到作用SELECT *FROM nation3;INSERTINTO supplier3VALUES(1,'lllllll','中国',40,'178233233233',1,'vip');
3.说明
在实例内容6中,插入到supplier3中的nationkey 40在nation3中并不存在,因此插入时违反了参照完整性。关于参照完整性的违约处理,一般情况下对参照表和被参照表的操作违反了参照完整性时,系统选择默认的策略,即拒绝执行,如果想让系统采用其他的策略则必须在创建表格时显示地加以说明。
转载地址:http://cxyni.baihongyu.com/