觸發器雖然在sql標準中有支援,但是幾個資料庫仍然還是具有特殊的語法。筆者試著寫了幾個比較常用的觸發器作為記錄。
使用一下兩個表作為觸發器的使用示例
drop
trigger
ifexists after_insert_trigger;
delimiter $
create
trigger after_insert_trigger
after
insert
on test1
foreach
rowbegin
insert
into test2 values(new.a, new.c, new.d);
end$
delimiter ;
drop
trigger
ifexists after_update_trigger;
delimiter $
create
trigger after_update_trigger
after
update
on test1
foreach
rowbegin
update test2 set c = new.c, d = new.d where test2.a = new.a;
end$
delimiter ;
drop
trigger
ifexists after_delete_trigger;
delimiter $
create
trigger after_delete_trigger
after
delete
on test1
foreach
rowbegin
delete
from test2 where test2.a = old.a;
end$
delimiter ;
在事件之前被執行的觸發器可以作為避免非法更新、插入或刪除的額外約束。為了避免執行非法動作而產生錯誤,觸發器可以採取措施來糾正問題,使更新、插入或刪除合法化。[1]
drop
trigger
ifexists before_insert_trigger;
delimiter $
create
trigger before_insert_trigger
before
insert
on test1
foreach
rowbegin
set new.b = new.b + 1;
end$
delimiter ;
postgresql對觸發器的語法是比較特殊的,需要先定義執行函式,然後在出發器中使用execute procedure
來處理執行的行為。
create
orreplace function after_insert_trigger()
returns trigger
as $$
begin
insert
into test2 values(new.a, new.c, new.d);
return null;
end;
$$language plpgsql;
drop
trigger
ifexists after_insert_trigger on test1;
create
trigger after_insert_trigger
after
insert
on test1
foreach
rowexecute
procedure after_insert_trigger();
其他行為語法均與上面例子相似,筆者便不再贅述。
[1] abraham silberschatz, henry f.korth s.sudarshan. 資料庫系統概念.楊冬青, 李紅燕, 唐世渭等譯. 北京. 機械工業出版社.2012.103-103.
讚賞
支付寶
sql 觸發器 直接遞迴觸發器
create trigger dbo loving20000 on dbo s for delete asdeclare age int select age sage from deleted delete s where sage age delete from s where sname xq...
sql 觸發器 儲存過程 觸發器(3 3)
1 what?什麼是觸發器 trigger 前兩篇介紹了儲存過程,儲存過程可以理解為sql語句集。那麼觸發器就是一種特殊的儲存過程,也就是一群特殊的sql語句集。特殊在哪?從上文得知,儲存過程是依賴名字才被呼叫的。不僅是儲存過程,我們常用的方法等,大部分也是先知道名字,才能去使用。就像吃飯採用訂外賣...
SQL之觸發器
觸發器是一種不帶引數特殊的儲存過程,有使用者定義,資料庫系統根據一定的條件自動執行 sql觸發器大體上可以分為4種 insert 觸發器 在對錶進行資料錄入的時候觸發 delete 觸發器 刪除表中的資料的時候觸發 instead of 觸發器 此類觸發器建立在檢視之上,用來替代相應的動作,比如de...