溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么利用數(shù)據(jù)庫觸發(fā)器實(shí)現(xiàn)數(shù)據(jù)的同步

發(fā)布時(shí)間:2021-11-04 11:54:54 來源:億速云 閱讀:185 作者:iii 欄目:關(guān)系型數(shù)據(jù)庫

本篇內(nèi)容主要講解“怎么利用數(shù)據(jù)庫觸發(fā)器實(shí)現(xiàn)數(shù)據(jù)的同步”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“怎么利用數(shù)據(jù)庫觸發(fā)器實(shí)現(xiàn)數(shù)據(jù)的同步”吧!

一、什么是觸發(fā)器

數(shù)據(jù)庫觸發(fā)器是一個(gè)與表相關(guān)聯(lián)的,存儲的PL/SQL 語句。每當(dāng)一個(gè)特定的數(shù)據(jù)操作語句(insert update delete)在指定的表上發(fā)出時(shí),Oracle自動執(zhí)行觸發(fā)器中定義的語句序列。

觸發(fā)器的應(yīng)用場景如下:

  • 復(fù)雜的安全性檢查

  • 數(shù)據(jù)的確認(rèn)

  • 數(shù)據(jù)庫審計(jì)

  • 數(shù)據(jù)的備份和審計(jì)

二、創(chuàng)建Oracle觸發(fā)器的語法

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指出觸發(fā)器的觸發(fā)時(shí)序分別為前觸發(fā)和后觸發(fā)方式,前觸發(fā)是在執(zhí)行觸發(fā)事件之前觸發(fā)當(dāng)前所創(chuàng)建的觸發(fā)器,后觸發(fā)是在執(zhí)行觸發(fā)事件之后觸發(fā)當(dāng)前所創(chuàng)建的觸發(fā)器。

  • FOR EACH ROW選項(xiàng)說明觸發(fā)器為行觸發(fā)器。

  • 行觸發(fā)器和語句觸發(fā)器的區(qū)別表現(xiàn)在:行觸發(fā)器要求當(dāng)一個(gè)DML語句操走影響數(shù)據(jù)庫中的多行數(shù)據(jù)時(shí),對于其中的每個(gè)數(shù)據(jù)行,只要它們符合觸發(fā)約束條件,均激活一次觸發(fā)器;而語句觸發(fā)器將整個(gè)語句操作作為觸發(fā)事件,當(dāng)它符合約束條件時(shí),激活一次觸發(fā)器。

  • 當(dāng)省略FOR EACH ROW 選項(xiàng)時(shí),BEFORE 和AFTER 觸發(fā)器為語句觸發(fā)器,而INSTEAD OF 觸發(fā)器則只能為行觸發(fā)器

  • REFERENCING 子句說明相關(guān)名稱,在行觸發(fā)器的PL/SQL塊和WHEN 子句中可以使用相關(guān)名稱參照當(dāng)前的新、舊列值,默認(rèn)的相關(guān)名稱分別為OLD和NEW。觸發(fā)器的PL/SQL塊中應(yīng)用相關(guān)名稱時(shí),必須在它們之前加冒號(:),但在WHEN子句中則不能加冒號。

  • WHEN 子句說明觸發(fā)約束條件。Condition 為一個(gè)邏輯表達(dá)時(shí),其中必須包含相關(guān)名稱,而不能包含查詢語句,也不能調(diào)用PL/SQL 函數(shù)。WHEN 子句指定的觸發(fā)約束條件只能用在BEFORE 和AFTER 行觸發(fā)器中,不能用在INSTEAD OF 行觸發(fā)器和其它類型的觸發(fā)器中。

  • 當(dāng)一個(gè)基表被修改( INSERT, UPDATE, DELETE)時(shí)要執(zhí)行的存儲過程,執(zhí)行時(shí)根據(jù)其所依附的基表改動而自動觸發(fā),因此與應(yīng)用程序無關(guān),用數(shù)據(jù)庫觸發(fā)器可以保證數(shù)據(jù)的一致性和完整性。

三、Oracle觸發(fā)器的類型

  • 行級觸發(fā)器:對DML語句影響的每個(gè)行執(zhí)行一次,例如,一條update語句更新了100條數(shù)據(jù),如果我們針對update定義了行級觸發(fā)器,那么行級觸發(fā)器將會被觸發(fā)100次 。

  • 語句級觸發(fā)器:對每個(gè)DML語句執(zhí)行一次,例如,一條update語句更新了200條數(shù)據(jù),如果我們針對update定義了語句級觸發(fā)器,那么語句級觸發(fā)器將會被觸發(fā)1次 。

四、利用數(shù)據(jù)庫觸發(fā)器實(shí)現(xiàn)數(shù)據(jù)的同步

1
2
3
4
5
6
7
8
9
create or replace trigger sync_salary                                    
after update                                    
on emp                                    
for each row                                    
begin                                    
  --當(dāng)主表更新后,自動更新備份表。                                    
  update emp_back set sal=:new.sal where empno=:new.empno;                                    
end;                                    
/                                    
  • 在上面的例子中,當(dāng)我們更新了主表emp的薪水后,這個(gè)行級觸發(fā)器將會被自動執(zhí)行更新備份表中的員工的薪水。

到此,相信大家對“怎么利用數(shù)據(jù)庫觸發(fā)器實(shí)現(xiàn)數(shù)據(jù)的同步”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI