SQL数据库_实验09
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验九数据完整性约束实现
姓名:学号:
专业:网络工程班级: 1
同组人:无实验日期:2012/4/13
【实验目的与要求】
1.熟练掌握实体完整性的实现。
2.熟练掌握参照完整性的实现。
3.熟练掌握域完整性的实现。
【实验内容与步骤】
实验准备:对于CPXS数据库,若在CP表、CPXSB表和XSS表上已有约束,请先删除之。
9.1.实体完整性的实现
(1) 对CP表,定义主键约束(用企业管理器实现)。
写出相应过程:
在cp表上右击鼠标,点击修改,然后选择列名,右击鼠标,点击设置主键。
测试:试着对CP表插入一条与原表中数据行具有相同主键值的数据。
给出测试结果:
(2)对CPXSB表、XSS表,定义主键约束(用SQL语句实现,写出相应语句)。
给出相应的SQL语句:
alter table xss
add constraint xsskey primary key(客户编号);
alter table cpxsb
add constraint cpxsbkey primary key(产品编号,客户编号);
给出测试结果:
9.2.参照完整性的实现
(1)利用企业管理器建立CP表与CPXSB之间的参照关系,当对主表CP表进行更新和删除操作时,从表CPXSB采用NO ACTION方式,写出其过程。
给出相应的过程:
(1)新建数据库关系图,添加cp表和cpxsb表,创建外间关系,将insert和update规范
中的更新规则和删除规则都设置为无操作。
(2)sql语句
alter table cpxsb
add constraint cpxsbkey1 foreign key(产品编号)references cp(产品编号) on delete no action
on update no action;
测试:试着删除主表中与从表有关联的一条记录,而后分别查看主表和从表中数据记录,给出测试结果。
将cp中产品编号为100004的一行删除,提示拒绝删除
(2)利用SQL语句建立CPXSB与XSS表之间的参照关系,当对主表XSS表进行更新和删除操作时,从表CPXSB采用CASCADE(级联)方式,写出其过程。
给出相应的SQL语句:
alter table cpxsb
add constraint cpxsbkey2 foreign key(客户编号)references xss(客户编号) on delete cascade
on update cascade;
测试:试着删除主表中与从表有关联的一条记录,而后分别查看主表和从表中数据记录,给出测试结果。
删除xss表中客户编号为00002的数据,在cpxsb中客户编号为00002的数据也随之删除。
删除客户编号为00002后的xss表。
在xss删除中删除数据后的cpxsb表
思考:外键参照关系中CASCADE(级联)和NO ACTION方式的作用各是什么?
on delete cascade和on update cascade表示当删除和更新主表中的关联数据时,级联删除和更新从表中的相应的元祖。
on delete no action和on update no action表示当删除和更新主表中关联的数据时,造成与从表的数据不一致,而拒绝删除。
9.3.域完整性的实现
1.Unique约束
(1)在CP表的“产品名称”列定义一个唯一约束。
给出相应的SQL语句:
alter table cp
add constraint cp1 unique(产品名称);
测试:试着在在CP表中插入一条具有与原表中某记录相同“产品名称”值的数据。给出测试结果:
在cp表中插入和MP3产品名称相同的记录。
(2)在CP表的价格列上定义大于等于0的检查(CHECK)约束。
给出相应的SQL语句:
alter table cp
add constraint cp2 check(价格>0);
测试:试着在CP表中插入一条记录,其“价格”字段的值小于0(如: -2),给出测试结果:
在cp表中插入价格为-3的一条记录。
(3)定义一个大于等于5的规则check_kcl,并将其绑定到CP表的库存量列,
给出相应的SQL语句:
alter table cp
add constraint check_kc1 check(库存量>=5);
测试:试着在CP表中插入一条记录,其“库存量”字段的值小于5(如:2),给出测试结果:
在cp表中插入库存量为3的一个记录:
(4)解除(3)中绑定,删除该规则,请写出相关SQL语句。
给出相应的SQL语句和运行结果截图:
alter table cp
drop constraint check_kc1;
测试:试着在CP表中插入一条记录,其“库存量”字段的值小于5(如:2),给出测试结果:
思考:比较(3)和(4)的测试结果,理解自定义完整性(约束)的作用?
数据的完整性是为了防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据,保证了数据的安全性。
9.4.完成以下实验练习
(1) 设定XSS表中的地区值只能是“镇江”,“无锡”,“上海”,“南京”,“厦门”中的任意一个,请问如何解决该问题?请写出一种具体的解决方法。
给出相应的SQL语句:
alter table xss
add constraint xss1 check(地区in('镇江','无锡','上海','南京','厦门测试:试着在XXS表中插入一条记录,其“地区”字段的值为福州。
给出测试结果:
插入地区字段为福州的记录:
(2) 用户要求:在输入XSS表中的数据时,若“地区”列没有提供数据,系统应自动取值“厦门”,请问如何解决该问题?请写出一种具体的解决方法。
给出相应的SQL语句: