數(shù)據(jù)庫觸發(fā)器Trigger詳解
在數(shù)據(jù)庫管理系統(tǒng)中,觸發(fā)器(Trigger)是一種特殊的存儲(chǔ)過程,它在特定的事件發(fā)生時(shí)自動(dòng)執(zhí)行。觸發(fā)器通常用于維護(hù)數(shù)據(jù)的完整性和一致性。通過事件觸發(fā)而被執(zhí)行,不能直接調(diào)用。
觸發(fā)器的三要素
觸發(fā)事件 before/after(insert、update、delete)
觸發(fā)條件 when
觸發(fā)動(dòng)作 begin ... end
觸發(fā)器的分類
根據(jù)觸發(fā)時(shí)機(jī)和觸發(fā)事件的不同,觸發(fā)器可以分為以下幾種類型:行級(jí)觸發(fā)器與語句級(jí)觸發(fā)器
行級(jí)觸發(fā)器(Row-Level Trigger)在每一行數(shù)據(jù)受到影響時(shí)觸發(fā),例如在插入、更新或刪除某一行數(shù)據(jù)時(shí)。
語句級(jí)觸發(fā)器(Statement-Level Trigger)則在執(zhí)行一條SQL語句時(shí)觸發(fā),無論該語句影響了多少行數(shù)據(jù)。
創(chuàng)建觸發(fā)器
SQL> creagte trigger <觸發(fā)器名> [{before | after}]
{[inster | delete | update of 列名列表] }
on 表名
[ referencing <臨時(shí)視圖名>]
[ when <觸發(fā)條件>]
<觸發(fā)動(dòng)作>
end [觸發(fā)器名]說明:
update: 指明是update觸發(fā)器,每當(dāng)update語句修改由of子句指定的列時(shí),激發(fā)觸發(fā)器。如果忽略of子句,每當(dāng)update修改表的任意列值時(shí),都將激發(fā)觸發(fā)器。
referencing <臨時(shí)視圖名>:指定臨時(shí)視圖別名,在觸發(fā)器運(yùn)行過程中,系統(tǒng)會(huì)生成另個(gè)臨時(shí)視圖分別存放被更新值舊值和新值(rollback用)。對(duì)于行級(jí)觸發(fā)器,默認(rèn)臨時(shí)視圖名分別為old和new;對(duì)于語句級(jí)觸發(fā)器,默認(rèn)臨時(shí)視圖名分別為old-table和new-table。
例如:
行級(jí)觸發(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
語句級(jí)觸發(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
postgres 數(shù)據(jù)庫中的數(shù)據(jù)轉(zhuǎn)換
postgres8.3以后,字段數(shù)據(jù)之間的默認(rèn)轉(zhuǎn)換取消了。如果需要進(jìn)行數(shù)據(jù)變換的話,在postgres數(shù)據(jù)庫中,我們可以用"::"來進(jìn)行字段數(shù)據(jù)的類型轉(zhuǎn)換。2009-07-07
數(shù)據(jù)庫安裝包和升級(jí)包腳本工具RedGate使用介紹
這篇文章主要介紹了數(shù)據(jù)庫安裝包和升級(jí)包腳本工具RedGate使用介紹,RedGate是一個(gè)SQL腳本生成工具,需要的朋友可以參考下2014-07-07
數(shù)據(jù)庫 三范式最簡(jiǎn)單最易記的解釋
數(shù)據(jù)庫 三范式最簡(jiǎn)單最易記的解釋,整理一下方便大家記憶。2009-07-07
數(shù)據(jù)庫修改多對(duì)多的中間表的記錄的技巧
修改多對(duì)多的中間表的記錄的方法,需要的朋友可以參考下。提高效率。2010-01-01
openGauss數(shù)據(jù)庫在CentOS上的安裝實(shí)踐記錄
這篇文章主要介紹了openGauss數(shù)據(jù)庫在CentOS上的安裝實(shí)踐,本文是基于華為云ECS+CentOS 7的openGauss數(shù)據(jù)庫安裝實(shí)踐,需要的朋友可以參考下2022-07-07
關(guān)于Rsa Public Key not Find的問題及解決
這篇文章主要介紹了關(guān)于Rsa Public Key not Find的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
淺談關(guān)系型數(shù)據(jù)庫中的約束及應(yīng)用場(chǎng)景
這篇文章主要介紹了淺談關(guān)系型數(shù)據(jù)庫中的約束及應(yīng)用場(chǎng)景,關(guān)系型數(shù)據(jù)庫是一種廣泛應(yīng)用的數(shù)據(jù)庫類型,它的核心是基于關(guān)系模型的結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)和管理,在關(guān)系型數(shù)據(jù)庫中,約束是一種重要的概念,它可以幫助我們保證數(shù)據(jù)的完整性和一致性,需要的朋友可以參考下2023-07-07

