实验三:完整性语言实验
3.1.1 实验目的
掌握实体完整性的定义和维护方法。
3.1.2 实验内容和要求
定义实体完整性,删除实体完整性。能够写出两种方式定义实体完整性的 SQL 语句:创建表时定义实体完整性、创建表后定义实体完整性。设计 SQL 语句验证完整性约束是否起作用。
3.1.3 实验重点和难点
实验重点:创建表时定义实体完整性。
实验难点:有多个候选码时实体完整性的定义。
3.1.4 实验内容记录
参照 employees 数据库创建一个新的数据库 test;
3.1.4.1 创建表时定义实体完整性(列级实体完整性)
创建雇员表。
3.1.4.2 创建表时定义实体完整性(表级实体完整性)
创建雇员表。
3.1.4.3 创建表后定义实体完整性
创建雇员表。
3.1.4.4 定义实体完整性(多属性主码)
创建职位表。
3.1.4.5 有多个候选码时定义实体完整性
当存在多个候选码时,只能定义一个主码,其它的候选码定义唯一性约束。
创建部门表。
3.1.4.6 删除实体完整性
删除部门表上的实体完整性。
3.1.5 思考题
(1)所有列级完整性约束都可以改写为表级完整性约束,而表级完整性约束不一定能改写为列级完整性约束。请举例说明。
多属性主码只能通过表级完整性约束定义。
(2)什么情况下会违反实体完整性约束,DBMS 将做何种违约处理?
当更新数据时,新的数据可能违反实体完整性约束。此时 DBMS 会拒绝执行。
3.2 参照完整性实验
3.2.1 实验目的
掌握参照完整性的定义和维护方法。
3.2.2 实验内容和要求
定义参照完整性,定义参照完整性的违约处理,删除参照完整性。写出两种方式定义参照完整性的 SQL 语句:创建表时定义参照完整性、创建表后定义参照完整性。
3.2.3 实验重点和难点
实验重点:创建表时定义参照完整性。
实验难点:参照完整性的违约处理定义。
3.2.4 实验内容记录
3.2.4.1 创建表时定义参照完整性
在已有员工表的情况下,定义工资表。
列级参照完整性定义。(MYSQL 定义列级外键约束无效。)
表级参照完整性定义。(MYSQL 支持外键约束命名。)
3.2.4.2 创建表后定义参照完整性
3.2.4.3 定义参照完整性的违约处理
定义两张表:(如果要定义删除后的行为,则必须不能与已有的限制冲突,如不能定义 NOT NULL。)
插入两条数据:
然后删除被参照表中的元组,之后参照表会变成:
3.2.4.4 删除参照完整性
删除 emp_dept 上的外码。
3.2.5 思考题
对于自引用表,例如课程表(课程号、课程名、先修课程号、学分)中的先修课程号引用该表的课程号,请完成如下任务:
(1)写出课程表上的实体完整性和参照完整性。
(2)在考虑实体完整性约束的条件下,试举出几种录入课程数据的方法。
在录入数据时,可以按照引用的顺序录入数据(总是先录入不存在引用或引用已存在的数据),也可以临时移除完整性约束,在录入数据后,再添加完整性约束。
如果数据本身无法满足约束,则引入约束时会失败。
3.3.1 实验目的
掌握用户自定义完整性的定义和维护方法。
3.3.2 实验内容和要求
针对具体应用语义,选择 NULL、NOT NULL、DEFAULT、DEFAULT、UNIQUE、CHECK 等,定义属性上的约束条件。
3.3.3 实验重点和难点
实验重点:NULL、NOT NULL、DEFAULT
实验难点:CHECK
3.3.4 实验内容记录
3.3.4.1 定义属性 NULL、NOT NULL、DEFAULT、UNIQUE约束
3.3.4.2 使用 CHECK 约束条件
3.3.4.3 检查CHECK约束
违反第一条
违反第二条
实验总结
本次实验通过实践学习了如何定义实体完整性,删除实体完整性;如何写出两种方式定义实体完整性的 SQL 语句:创建表时定义实体完整性、创建表后定义实体完整性;以及设计 SQL 语句验证完整性约束是否起作用。