sql觸發器

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;

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章