資料庫觸發器使用詳解,看完這個就夠了!

2021-09-25 09:12:51 字數 2163 閱讀 1525

--if object_id('tr_orders_insert','tr') is not null

--drop trigger tr_orders_insert;

--go

create or replace trigger ud_trigger

before insert or update on emplyq1122   --觸發事件 / update of 列 on 表 說明當更改某一列的資料時候才會觸發。

referencing

old as oldtuple --給舊行和新行取新的名字,

new as newtuple

for each row                  -- 每修改一行都需要呼叫此過程,

-- 對此我們稱之為行級觸發器,old,和new 才可以使用 insert觸發操作 只有 :new

-- delete觸發操作 只有 :old; update觸發操作 都有。

declare --定義變數

--pragma autonomous_transaction; -- 宣告自治事務

my_err exception; --使用者自定義錯誤

errno integer;

errmsg char(200);

minsalary number(10,3);

maxsalary number(10,3);

-- 變數名 表名.欄位名%type; //根據表的字段定義變數型別

--when (new.job_id = 'sa_rep') 也可以使用when來限制出發條件,當滿足的時候才會開始執行下面的begin觸發體

begin

–oracle 規定 不能在觸發器中寫commit,rollback。?????

試想一下,如果在觸發器裡面可以使用commit,你執行了某個批量更新操作

每一條都執行觸發器的操作,即每一條都commit,

這樣就無法再進行rollback到整個更新操作之前的狀態。

–採用自治事務的方式,可以在trigger裡rollback or commit;

–觸發器執行規則 : 對於同乙個表上的多個before觸發器,遵循』誰先建立誰執行的原則』

–2.2 msyql觸發器的trigger_time和trigger_event

現在,重新注意到trigger_time和trigger_event,上文說過, trigger_time可以用before和after替換,表示觸發器程式的執行在sql執行的前還是後

;trigger_event可以用 insert,update,delete替換,表示觸發器程式在什麼型別的sql下會被觸發。

在乙個表上最多建立6個觸發器,即1)before insert型,2)before update型,3)before delete型,4)after insert型,5)after update型,6)after delete型。

觸發器的乙個限制是不能同時在乙個表上建立2個相同型別的觸發器。這個限制的乙個**是觸發器程式體的「begin和end之間允許執行多個語句」

(摘自mysql使用手冊)。

另外還有一點需要注意,msyql除了對insert,update,delete基本操作進行定義外,還定義了load data和replace語句,

而load data和replace語句也能引起上述6中型別的觸發器的觸發。

load data語句用於將乙個檔案裝入到乙個資料表中,相當與一系列insert操作。replace語句一般來說和insert語句很像,

只是在表中有 primary key和unique索引時,如果插入的資料和原來primary key和unique索引一致時,會先刪除原來的資料,

然後增加一條新資料;也就是說,一條replace sql有時候等價於一條insert sql,有時候等價於一條delete sql加上一條insert sql。即是:

? insert型觸發器:可能通過insert語句,load data語句,replace語句觸發;

? update型觸發器:可能通過update語句觸發;

? delete型觸發器:可能通過delete語句,replace語句觸發;

oracle資料庫觸發器使用 trigger

1.更新前觸發,不允許週日修改 create or replace trigger auth secure before insert or update or delete on tb emp begin if to char sysdate,dy 星期日 then end if end 2.自增...

MySQL觸發器使用詳解

mysql包含對觸發器的支援。觸發器是一種與表操作有關的資料庫物件,當觸發器所在表上出現指定事件時,將呼叫該物件,即表的操作事件觸發表上的觸發器的執行。建立觸發器 在mysql中,建立觸發器語法如下 複製 如下 create trigger trigger name trigger time tri...

MySQL觸發器使用詳解

mysql包含對觸發器的支援。觸發器是一種與表操作有關的資料庫物件,當觸發器所在表上出現指定事件時,將呼叫該物件,即表的操作事件觸發表上的觸發器的執行。建立觸發器 在mysql中,建立觸發器語法如下 複製 如下 create trigger trigger name trigger time tri...