數(shù)據(jù)庫觸發(fā)器Trigger詳解
在數(shù)據(jù)庫管理系統(tǒng)中,觸發(fā)器(Trigger)是一種特殊的存儲過程,它在特定的事件發(fā)生時自動執(zhí)行。觸發(fā)器通常用于維護數(shù)據(jù)的完整性和一致性。通過事件觸發(fā)而被執(zhí)行,不能直接調(diào)用。
觸發(fā)器的三要素
觸發(fā)事件 before/after(insert、update、delete)
觸發(fā)條件 when
觸發(fā)動作 begin ... end
觸發(fā)器的分類
根據(jù)觸發(fā)時機和觸發(fā)事件的不同,觸發(fā)器可以分為以下幾種類型:行級觸發(fā)器與語句級觸發(fā)器
行級觸發(fā)器(Row-Level Trigger)在每一行數(shù)據(jù)受到影響時觸發(fā),例如在插入、更新或刪除某一行數(shù)據(jù)時。
語句級觸發(fā)器(Statement-Level Trigger)則在執(zhí)行一條SQL語句時觸發(fā),無論該語句影響了多少行數(shù)據(jù)。
創(chuàng)建觸發(fā)器
SQL> creagte trigger <觸發(fā)器名> [{before | after}] {[inster | delete | update of 列名列表] } on 表名 [ referencing <臨時視圖名>] [ when <觸發(fā)條件>] <觸發(fā)動作> end [觸發(fā)器名]
說明:
update: 指明是update觸發(fā)器,每當update語句修改由of子句指定的列時,激發(fā)觸發(fā)器。如果忽略of子句,每當update修改表的任意列值時,都將激發(fā)觸發(fā)器。
referencing <臨時視圖名>:指定臨時視圖別名,在觸發(fā)器運行過程中,系統(tǒng)會生成另個臨時視圖分別存放被更新值舊值和新值(rollback用)。對于行級觸發(fā)器,默認臨時視圖名分別為old和new;對于語句級觸發(fā)器,默認臨時視圖名分別為old-table和new-table。
例如:
行級觸發(fā)器
觸發(fā)器中還可以回退修改使用rollback
SQL> create trigger bad_trg after update of balance on users referencing new row as nrow, old row as orow for each row when nrow.balance < 0 begin rollback # 插入不良記錄 insert into bads select concat(borrows.userid, convert(varchar(100), getdate(), 10)), borrows.userid, brid, getdate() from borrows when nrow.userid = borrows.userid and etime is null end
語句級觸發(fā)器
SQL> create trigger RAISE_LIMIT after update of SAL on EMP referencing new table as n_tb, old table as o_tb for each statement when (800 > (select avg(SAL) from EMP) begin delete from EMP where ENO in ( select ENO from n_tb ) insert into EMP ( select * from o_tb ) end
修改觸發(fā)器
SQL> alter trigger bad_trg after update on users AS BEGIN -- 新的觸發(fā)器邏輯 PRINT 'Employee record has been updated.' -- 可以添加更多的邏輯,例如記錄日志或執(zhí)行其他操作 END
刪除觸發(fā)器
SQL> drop trigger bad_trg
到此這篇關(guān)于數(shù)據(jù)庫觸發(fā)器Trigger的文章就介紹到這了,更多相關(guān)數(shù)據(jù)庫觸發(fā)器Trigger內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
postgres 數(shù)據(jù)庫中的數(shù)據(jù)轉(zhuǎn)換
postgres8.3以后,字段數(shù)據(jù)之間的默認轉(zhuǎn)換取消了。如果需要進行數(shù)據(jù)變換的話,在postgres數(shù)據(jù)庫中,我們可以用"::"來進行字段數(shù)據(jù)的類型轉(zhuǎn)換。2009-07-07數(shù)據(jù)庫安裝包和升級包腳本工具RedGate使用介紹
這篇文章主要介紹了數(shù)據(jù)庫安裝包和升級包腳本工具RedGate使用介紹,RedGate是一個SQL腳本生成工具,需要的朋友可以參考下2014-07-07openGauss數(shù)據(jù)庫在CentOS上的安裝實踐記錄
這篇文章主要介紹了openGauss數(shù)據(jù)庫在CentOS上的安裝實踐,本文是基于華為云ECS+CentOS 7的openGauss數(shù)據(jù)庫安裝實踐,需要的朋友可以參考下2022-07-07關(guān)于Rsa Public Key not Find的問題及解決
這篇文章主要介紹了關(guān)于Rsa Public Key not Find的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07淺談關(guān)系型數(shù)據(jù)庫中的約束及應用場景
這篇文章主要介紹了淺談關(guān)系型數(shù)據(jù)庫中的約束及應用場景,關(guān)系型數(shù)據(jù)庫是一種廣泛應用的數(shù)據(jù)庫類型,它的核心是基于關(guān)系模型的結(jié)構(gòu)化數(shù)據(jù)存儲和管理,在關(guān)系型數(shù)據(jù)庫中,約束是一種重要的概念,它可以幫助我們保證數(shù)據(jù)的完整性和一致性,需要的朋友可以參考下2023-07-07