CH 数据库完整性本章重点.ppt
文本预览下载声明
插入元组或修改属性的值时,RDBMS检查元组上的约束条件是否被满足 如果不满足则操作被拒绝执行 元组上的约束条件检查和违约处理 * */56 5.1 实体完整性 5.2 参照完整性 5.3 用户定义的完整性 5.4 完整性约束命名字句 5.5 触发器 * */56 1. CONSTRAINT 约束 语法: CONSTRAINT 完整性约束条件名 [PRIMARY KEY短语 |FOREIGN KEY短语|CHECK短语] 完整性约束命名子句 * */56 例10: 建立学生登记表Student,要求学号在90000~99999之间,姓名不能取空值,年龄小于30,性别只能是“男”或“女” CREATE TABLE Student ( Sno NUMERIC(6) CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999), Sname CHAR(20) CONSTRAINT C2 NOT NULL, Sage NUMERIC(3) CONSTRAINT C3 CHECK (Sage 30), Ssex CHAR(2) CONSTRAINT C4 CHECK (Ssex IN ( 男,女)), CONSTRAINT StudentKey PRIMARY KEY(Sno) ); * */56 2. 修改表中的完整性限制 使用ALTER TABLE语句修改表中的完整性限制 * */56 例13:修改表Student中的约束条件,要求学号改为在900000~999999之间,年龄由小于30改为小于40 可以先删除原来的约束条件,再增加新的约束条件 ALTER TABLE Student DROP CONSTRAINT C1; ALTER TABLE Student ADD CONSTRAINT C1 CHECK (Sno BETWEEN 900000 AND 999999); ALTER TABLE Student DROP CONSTRAINT C3; ALTER TABLE Student ADD CONSTRAINT C3 CHECK (Sage 40); * */56 5.1 实体完整性 5.2 参照完整性 5.3 用户定义的完整性 5.4 完整性约束命名字句 5.5 触发器 * */56 典型的应用:银行的取款机系统 为什么需要触发器 * */56 演示: 为什么需要触发器.sql 帐户信息表bank 交易信息表transInfo 张三取钱200 问题: 没有自动修改张三的余额 张三开户1000元,李四开户1元 什么是触发器 * */56 张三 李四 王五 赵二 王三 宋二 刘五 插入 删除 触发器触发 赵二退休 赵二 员工表 退休员工表 触发器是在对表进行插入、更新或删除操作时自动执行的存储过程 触发器通常用于强制业务规则 触发器是一种高级约束,可以定义比用CHECK 约束更为复杂的约束 可执行复杂的SQL语句(if/while/case) 可引用其它表中的列 特点: 触发器定义在特定的表上,与表相关 自动触发执行 不能直接调用 是一个事务(可回滚) * */56 触发器触发时: 系统自动在内存中创建deleted表或inserted表 只读,不允许修改;触发器执行完成后,自动删除 inserted 表 临时保存了插入或更新后的记录行 可以从inserted表中检查插入的数据是否满足业务需求 如果不满足,则向用户报告错误消息,并回滚插入操作 deleted 表 临时保存了删除或更新前的记录行 可以从deleted表中检查被删除的数据是否满足业务需求 如果不满足,则向用户报告错误消息,并回滚插入操作 inserted 和deleted 表 * */56 * */56 修改操作 inserted表 deleted表 增加(INSERT)记录 存放新增的记录 删除(DELETE)记录 存放被删除的记录 修改(UPDATE)记录 存放更新后的记录 存放更新前的记录 inserted表和deleted表存放的信息 DELETE 触发器 INSERT 触发器 UPDATE 触发器 触发器的类型 * */56 创建触发器的语法: WITH ENCRYPTION表示加密触发器定义的SQL文本(syscomments中) DELETE, INSERT, UPDATE指定触发器的类型 如何创建触发器 * */56 CREATE TRIGGER trigger_name ON table_name [WITH ENCRYPTION] FOR [DELETE, INSER
显示全部