博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL语句(八)参照完整性
阅读量:4074 次
发布时间:2019-05-25

本文共 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/

你可能感兴趣的文章
FMS 客户端带宽计算、带宽限制
查看>>
在线视频聊天(客服)系统开发那点事儿
查看>>
语法解析器!
查看>>
SecurityError Error 2148 SWF 不能访问本地资源
查看>>
Flex4的可视化显示对象
查看>>
Flex:自定义滚动条样式/隐藏上下箭头
查看>>
烈焰SWF解密
查看>>
Qt 静态编译后的exe太大, 可以这样压缩.
查看>>
3D游戏常用技巧Normal Mapping (法线贴图)原理解析——基础篇
查看>>
C#的扩展方法解说
查看>>
.linearDrag on rigidbody / rigidbody2D in code?
查看>>
mute
查看>>
Google、微软软件测试之道
查看>>
Fiddler调试和Wireshark数据包分析
查看>>
Unity物品栏、商城3D物品的显示插件
查看>>
代码大全、人月神话和你的灯亮着吗三本软件开发设计方面好书
查看>>
Lua的闭包详解(终于搞懂了)
查看>>
Unity Standard Assets 简介之 CrossPlatformInput
查看>>
快速了解和使用Photon Server
查看>>
Unity之Application.runInBackground = true
查看>>