0.DDL和DML
DDL:data manipulation language,数据操作语言,主要命令有select,update,insert,delete,主要用于对数据库中的数据进行操作
DDL:data definition language,数据定义语言,主要命令有create,alter,drop,主要用于定义和修改表
DCL:data contral language,数据控制语言,主要命令有grant,rollback,commitdeng,主要用于授权或收回访问数据库的某种权限,并控制数据库操事务发生的时间及效果,对数据库进行监视。
1.触发器的用途
(1)完成表的变更校验,当表中的数据发生insert、update或者delete等DML操作时,提供验证逻辑,验证更改数据的正确性、检查完整性约束、记录事件日志等。
(2)自动数据库维护,使用系统级的触发器,可以在数据库系统启动或者退出时,通过触发器完成系统初始化和清楚操作。
(3)控制数据库管理活动,使用触发器精细管理和控制数据库中的数据库管理活动,若删除或修改表等DDL操作,保证DDL操作的检查。
2.触发器的分类
根据触发的实际和影响的行数,可以分为4类
- 行触发器和语句触发器
- before触发器和after触发器
- instead of触发器
- 系统事件触发器和用户事件触发器,数据库启动,服务器错误消息事件触发属于系统事件;用户登录或退出,执行DDL或DML语句属于用户事件
根据触发器所创建的语句及影响的对象不同,可分为3类
- DML触发器,表的增、删、改,可以是行触发器、语句触发器、before触发器、after触发器
- 系统触发器,对数据库实例活某个用户模式进行操作时的触发器,可以使数据库系统触发器和拥护触发器
- 替代触发器,对视图进行操作时定义的触发器
3.触发器的写法
CREATE [OR REPALCE] TRIGGER trigger_name
[BEFORE | AFTER | INSTEAD OF] triggering_event
[referencing_clause]
[WHEN trigger_condition]
[FOR EACH ROW]
trigger body
- trigger_name:触发器的名称
- triggering_event:引发触发器的事件,如对一个表或视图进行DML操作
- referencing_clause:替换名字用
- trigger_condition:用来指定触发的条件,当触发器定义中包含WHEN语句时,将先求值,当值为True时,才执行触发器
- FOR EACH ROW:指定该字句表示创建的是行级的出尕其,否则创建的是语句级的触发器
- trigger_body:指定触发器的执行代码区,是一个标准的PL/SQL块。
触发器代码不能超过32KB,过大时分隔为多个存储过程,使用CALL调用存储过程。
触发器代码只能包含DML语句,不能包含DDL语句。
4.具体实践
(1)限制对表的更新修改
(2)实现表的自动更新
(3)提供日志记录
附:
主要是学习Oracle PL/SQL从入门到精通这本书的总结和实践