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;