实验9 数据完整性约束实现
- 格式:doc
- 大小:426.05 KB
- 文档页数:13
第 1 页 共 13 页
实验九 数据完整性约束实现
【实验目的与要求】
1. 熟练掌握实体完整性的实现。
2. 熟练掌握参照完整性的实现。
3. 熟练掌握域完整性的实现。
【实验内容与步骤】
实验准备:对于CPXS数据库,若在CP表、CPXSB表和XSS表上已有约束,请先
删除之。
9.1. 实体完整性的实现
(1) 对CP表,定义主键约束(用企业管理器实现)。
写出相应过程:
测试:试着对CP表插入一条与原表中数据行具有相同主键值的数据。
给出测试结果:
第 2 页 共 13 页
(2)对CPXSB表、XSS表,定义主键约束(用SQL语句实现,写出相应语句)。
给出相应的SQL语句:
Alter table cpxsb add constraint c1 primary key(产品编号,客户编号,销
售日期)
Alter table xss add constraint c2 primary key(客户编号)
给出测试结果:
第 3 页 共 13 页
9.2. 参照完整性的实现
(1)利用企业管理器建立CP表与CPXSB之间的参照关系,当对主表CP表进行更新和
删除操作时,从表CPXSB采用NO ACTION方式,写出其过程。
给出相应的过程:
测试:试着删除主表中与从表有关联的一条记录,而后分别查看主表和从表中数据记录,
给出测试结果。
第 4 页 共 13 页
由图可知,删除了从表中与主表有关的记录,但主表的数据没发生变化
(2)利用SQL语句建立CPXSB与XSS表之间的参照关系,当对主表XSS表进行更新和
删除操作时,从表CPXSB采用CASCADE(级联)方式,写出其过程。
给出相应的SQL语句:
Alter table cpxsb add constraint a1
Foreign key (客户编号) references XSS(客户编号)
on update cascade
on delete cascade
第 5 页 共 13 页
测试:试着删除主表中与从表有关联的一条记录,而后分别查看主表和从表中数据记录,
给出测试结果。
第 6 页 共 13 页
思考:外键参照关系中CASCADE(级联)和NO ACTION方式的作用各是什么?
cascade指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引
用,则也将删除所有包含那些外键的行;
no action 指定如果试图删除/修改某一行,而该行的键被其他表的现有行中的外
键所引用,则产生错误并回滚 DELETE/UPDATE语句
9.3. 域完整性的实现
1.Unique约束
(1)在CP表的“产品名称”列定义一个唯一约束。
给出相应的SQL语句:
Alter table cp add constraint cp1 unique key(产品名称)
测试:试着在在CP表中插入一条具有与原表中某记录相同“产品名称”值的数据。
给出测试结果:
第 7 页 共 13 页
2.Check约束
(1)在CP表的价格列上定义大于等于0的检查(CHECK)约束。
给出相应的SQL语句:
Alter table cp add constraint cp2 check (价格>0)
测试:试着在CP表中插入一条记录,其“价格”字段的值小于0(如: -2),给出测试
结果:
(2)定义一个大于等于5的规则check_kcl,并将其绑定到CP表的库存量列,
给出相应的SQL语句:
Alter table cp add constraint check_ckl check(库存量>=5)
第 8 页 共 13 页
测试:试着在CP表中插入一条记录,其“库存量”字段的值小于5(如:2),给出测试
结果:
(3)解除(2)中绑定,删除该规则,请写出相关SQL语句。
给出相应的SQL语句和运行结果截图:
Alter table cp drop check_ckl
第 9 页 共 13 页
测试:试着在CP表中插入一条记录,其“库存量”字段的值小于5(如:2),给出测试
结果:
思考:比较(2)和(3)的测试结果,理解自定义完整性(约束)的作用?
对输入的数据起限制作用。
9.4. 完成以下实验练习
(1) 设定XSS表中的地区值只能是“镇江”,“无锡”,“上海”,“南京”,“厦门”中的任
意一个,请问如何解决该问题?请写出一种具体的解决方法。
第 10 页 共 13 页
给出相应的SQL语句:
Alter table xss add constraint xss1 check(地区 in (‘镇江’,’无锡’,’上海’,’南京’,’厦
门’))
测试:试着在XXS表中插入一条记录,其“地区”字段的值为福州。
给出测试结果:
(2) 用户要求:在输入XSS表中的数据时,若“地区”列没有提供数据,系统应自动取
值“厦门”,请问如何解决该问题?请写出一种具体的解决方法。
给出相应的SQL语句:
Alter table xss add constraint xss2 default(‘厦门’) for 地区
第 11 页 共 13 页
测试:试着在XXS表中插入一条记录,其“地区”字段的值为空。而后查询插入的数据。
给出测试结果:
第 12 页 共 13 页
(3) 用户要求:CPXSB表中的“数量”列的取值只能为1—20之间的整数,且在用户没
有输入数据时自动取值1,请问如何解决该问题?请写出一种具体的解决方法。
给出相应的SQL语句:
Alter table cpxsb add constraint cpxsb1 default (‘1’) for 数量
Alter table cpxsb add constraint cpxsb2 check(数量>=1 and 数量<=20)
测试:试着在CPXSB表中插入一条记录,其“数量”字段的值为45。
给出测试结果:
测试:试着在CPXSB表中插入一条记录,其“数量”字段的值为空。而后查询插入的数
据。
给出测试结果:
第 13 页 共 13 页