实验三 - SQL 数据完整性
张海 3130000923
实验目的
1. 熟悉通过 SQL 进行数据完整性控制的方法。
实验要求
1. 定义若干表,其中包括 Primary Key, Foreign Key 和 Check 的定 义。
2. 让表中插入数据,考察 Primary Key 如何控制实体完整性。
3. 删除被引用表中的行,考察 Foreign Key 中 ON DELETE 子句如何 控制参照完整性。
4. 修改被引用表中的行的 Primary Key,考察 Foreign Key 中 ON UPDATE 子句如何控制参照完整性。
5. 修改或插入表中数据,考察 CHECK 子句如何控制校验完整性。
6. 定义一个 Assertion, 并通过修改表中数据考察断言如何控制数据完 整性。
7. 定义一个 Trigger, 并通过修改表中数据考察触发器如何起作用。
8. 完成实验报告。
实验平台
1. 数据库管理系统:MySQL
实验过程
1. 新建表,其重点是 Foreign Key 与 Check 的建立,与 ON DELETE 和 ON UPDATE 语句:
2. Primary Key 测试:尝试插入 Primary Key 相同的两个记录,前一 个成功,后一个失败:
3. 插入其他表中数据,Check 测试失败(工资小于 2000 依然成功插 入)
4. 删除被引用表中的行,由于原先的设置为 RESTRICT,故删除被拒 绝:
5. 修改被引用表中的行,由于原先的设置为 CASCADE,故递归地改 变所有引用处,works 表中的名字也改变为 Bob:
6. 尝试加入断言,失败(MySQL 不支持):
7. 加入触发器,任何更新 works 表的操作都要求薪水在 2000 以上:
8. 触发器被触发,工资提升:
实验难点与解决方案
1. MySQL 的支持问题,包括 Check, Assertion, Trigger 中的事件驱动 操作等均无法正常支持。
2. 对语句的理解需要注意,例如添加 Trigger 时写了 ON UPDATE,
那么在 INSERT INTO 的时候就不会触发,我也因此花费了不少时 间。