您好,登錄后才能下訂單哦!
本篇內容主要講解“怎么利用數據庫觸發器實現數據的同步”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么利用數據庫觸發器實現數據的同步”吧!
數據庫觸發器是一個與表相關聯的,存儲的PL/SQL 語句。每當一個特定的數據操作語句(insert update delete)在指定的表上發出時,Oracle自動執行觸發器中定義的語句序列。
觸發器的應用場景如下:
復雜的安全性檢查
數據的確認
數據庫審計
數據的備份和審計
1 2 3 4 5 6 7 8 9 | CREATE [ OR REPLACE ] TRIGGER trigger_name
{BEFORE | AFTER }
{ INSERT | DELETE | UPDATE [ OF column [, column …]]}
[ OR { INSERT | DELETE | UPDATE [ OF column [, column …]]}...]
ON [ schema .]table_name | [ schema .]view_name
[REFERENCING {OLD [ AS ] old | NEW [ AS ] new| PARENT as parent}]
[ FOR EACH ROW ]
[ WHEN condition]
PL/SQL_BLOCK | CALL procedure_name;
|
其中:
BEFORE 和AFTER指出觸發器的觸發時序分別為前觸發和后觸發方式,前觸發是在執行觸發事件之前觸發當前所創建的觸發器,后觸發是在執行觸發事件之后觸發當前所創建的觸發器。
FOR EACH ROW選項說明觸發器為行觸發器。
行觸發器和語句觸發器的區別表現在:行觸發器要求當一個DML語句操走影響數據庫中的多行數據時,對于其中的每個數據行,只要它們符合觸發約束條件,均激活一次觸發器;而語句觸發器將整個語句操作作為觸發事件,當它符合約束條件時,激活一次觸發器。
當省略FOR EACH ROW 選項時,BEFORE 和AFTER 觸發器為語句觸發器,而INSTEAD OF 觸發器則只能為行觸發器
REFERENCING 子句說明相關名稱,在行觸發器的PL/SQL塊和WHEN 子句中可以使用相關名稱參照當前的新、舊列值,默認的相關名稱分別為OLD和NEW。觸發器的PL/SQL塊中應用相關名稱時,必須在它們之前加冒號(:),但在WHEN子句中則不能加冒號。
WHEN 子句說明觸發約束條件。Condition 為一個邏輯表達時,其中必須包含相關名稱,而不能包含查詢語句,也不能調用PL/SQL 函數。WHEN 子句指定的觸發約束條件只能用在BEFORE 和AFTER 行觸發器中,不能用在INSTEAD OF 行觸發器和其它類型的觸發器中。
當一個基表被修改( INSERT, UPDATE, DELETE)時要執行的存儲過程,執行時根據其所依附的基表改動而自動觸發,因此與應用程序無關,用數據庫觸發器可以保證數據的一致性和完整性。
行級觸發器:對DML語句影響的每個行執行一次,例如,一條update語句更新了100條數據,如果我們針對update定義了行級觸發器,那么行級觸發器將會被觸發100次 。
語句級觸發器:對每個DML語句執行一次,例如,一條update語句更新了200條數據,如果我們針對update定義了語句級觸發器,那么語句級觸發器將會被觸發1次 。
1 2 3 4 5 6 7 8 9 | create or replace trigger sync_salary
after update
on emp
for each row
begin
--當主表更新后,自動更新備份表。
update emp_back set sal=:new.sal where empno=:new.empno;
end ;
/
|
在上面的例子中,當我們更新了主表emp的薪水后,這個行級觸發器將會被自動執行更新備份表中的員工的薪水。
到此,相信大家對“怎么利用數據庫觸發器實現數據的同步”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。