触发器:一种特殊的存储过程,定义了与数据库相关事件发生时间前后应该执行的代码块。
触发器应用场景:管理复杂的完整性约束,监控对表的修改,通知其他应用,对数据进行审计,跨库同步数据。
触发事件:
DML:insert,update,delete
DDL:create,alter,drop
引发数据库系统事件:启动系统,退出系统,产生异常错误
引发用户事件:登录数据库,退出数据库
触发器语法格式:
create [or replace] trigger tri_name
[before | after | instead of] tri_event
on table_name | view_name | user_name | db_name
[for each row] [when tri_condition]
begin
plsql_sentences;
end tri_name;
trigger | 表示创建触发器的关键字 |
before | after | instead of | 表示触发时机的关键字,instead of表示触发器为替代触发器 |
on | 表示操作数据库对象(表、视图、用户模式、数据库等) |
for each row | 指定触发器为行级触发器 |
tri_name | 触发器名字 |
tri_event | 触发事件 |
table_name | view_name | user_name | db_name | 表示操作的数据库对象(表、视图、用户模式、数据库等)名字 |
tri_condition | 表示触发条件表达式 |
plsql_sentences | 触发器功能实现的实体 |
![]() ![]() | 触发器分类 |
行级触发器 | DML语句执行对每一行数据进行操作都会引发执行 |
语句级触发器 | 不管DML语句操作影响多少行数据,触发器只执行一次 |
替换触发器 | 定义在试图上,而不是表上,用来替换所使用实际语句的触发器 |
用户事件触发器 | DDL,用户登陆退出数据库 |
系统事件触发器 | oracle服务的启动与关闭 |