1、触发器是什么?
触发器(TRIGGER)是由事件来触发某个操作。这些事件包括INSERT语句、UPDATE语句和DELETE语句。当数据库系统执行这些事件时,会激活促发其执行相应的操作。
2、触发器基本创建
create [or replace] 中 or replace 和存储过程/函数中一致,是 存在则覆盖,不存在则创建
before | after 是指触发器在执行之前还是之后进行
insert | update | delete 是指执行什么事件时执行触发器,增删改
for each row 代表 是否行级触发
/*
触发器
语法:
create or replace trigger 触发器名
before | after
insert | update | delete
on 表名
[for each row] -- 可选,是否行级触发,每行运行都会执行
declare
-- 变量定义
begin
-- 触发器执行语句
end;
*/
实例一:更新工资触发器(新工资不能比之前工资低)
create or replace trigger tri_updatesal
before
update
on emp
for each row
declare
begin
if :old.sal > :new.sal then
dbms_output.put_line('新工资不能比之前工资低');
-- raise_application_error(-20002,'新工资不能比之前工资低');
end if;
end;
实例二:模拟mysql中 auto自增id
主要原理:创建序列,每次执行insert语句前调用触发器,进行pid赋值序列nextval。
/*
模拟mysql自增id
*/
-- 创建表
create table person(
pid number primary key,
pname varchar2(10)
)
-- 插入 pid 列 为null
insert into person values(null,'zs');
--查询
select * from person;
-- 创建序列 自增id用序列
create sequence seq_person_pid;
-- 创建触发器
create or replace trigger tri_insertpid
before
insert
on person
for each row
declare
begin
-- 查询出序列并赋值给person表pid
select seq_person_pid.nextval into :new.pid from dual;
end;