本篇內(nèi)容主要講解“怎么利用數(shù)據(jù)庫(kù)觸發(fā)器實(shí)現(xiàn)數(shù)據(jù)的同步”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“怎么利用數(shù)據(jù)庫(kù)觸發(fā)器實(shí)現(xiàn)數(shù)據(jù)的同步”吧!
創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比建始網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式建始網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋建始地區(qū)。費(fèi)用合理售后完善,10余年實(shí)體公司更值得信賴。
數(shù)據(jù)庫(kù)觸發(fā)器是一個(gè)與表相關(guān)聯(lián)的,存儲(chǔ)的PL/SQL 語(yǔ)句。每當(dāng)一個(gè)特定的數(shù)據(jù)操作語(yǔ)句(insert update delete)在指定的表上發(fā)出時(shí),Oracle自動(dòng)執(zhí)行觸發(fā)器中定義的語(yǔ)句序列。
觸發(fā)器的應(yīng)用場(chǎng)景如下:
復(fù)雜的安全性檢查
數(shù)據(jù)的確認(rèn)
數(shù)據(jù)庫(kù)審計(jì)
數(shù)據(jù)的備份和審計(jì)
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)說(shuō)明觸發(fā)器為行觸發(fā)器。
行觸發(fā)器和語(yǔ)句觸發(fā)器的區(qū)別表現(xiàn)在:行觸發(fā)器要求當(dāng)一個(gè)DML語(yǔ)句操走影響數(shù)據(jù)庫(kù)中的多行數(shù)據(jù)時(shí),對(duì)于其中的每個(gè)數(shù)據(jù)行,只要它們符合觸發(fā)約束條件,均激活一次觸發(fā)器;而語(yǔ)句觸發(fā)器將整個(gè)語(yǔ)句操作作為觸發(fā)事件,當(dāng)它符合約束條件時(shí),激活一次觸發(fā)器。
當(dāng)省略FOR EACH ROW 選項(xiàng)時(shí),BEFORE 和AFTER 觸發(fā)器為語(yǔ)句觸發(fā)器,而INSTEAD OF 觸發(fā)器則只能為行觸發(fā)器
REFERENCING 子句說(shuō)明相關(guān)名稱,在行觸發(fā)器的PL/SQL塊和WHEN 子句中可以使用相關(guān)名稱參照當(dāng)前的新、舊列值,默認(rèn)的相關(guān)名稱分別為OLD和NEW。觸發(fā)器的PL/SQL塊中應(yīng)用相關(guān)名稱時(shí),必須在它們之前加冒號(hào)(:),但在WHEN子句中則不能加冒號(hào)。
WHEN 子句說(shuō)明觸發(fā)約束條件。Condition 為一個(gè)邏輯表達(dá)時(shí),其中必須包含相關(guān)名稱,而不能包含查詢語(yǔ)句,也不能調(diào)用PL/SQL 函數(shù)。WHEN 子句指定的觸發(fā)約束條件只能用在BEFORE 和AFTER 行觸發(fā)器中,不能用在INSTEAD OF 行觸發(fā)器和其它類型的觸發(fā)器中。
當(dāng)一個(gè)基表被修改( INSERT, UPDATE, DELETE)時(shí)要執(zhí)行的存儲(chǔ)過(guò)程,執(zhí)行時(shí)根據(jù)其所依附的基表改動(dòng)而自動(dòng)觸發(fā),因此與應(yīng)用程序無(wú)關(guān),用數(shù)據(jù)庫(kù)觸發(fā)器可以保證數(shù)據(jù)的一致性和完整性。
行級(jí)觸發(fā)器:對(duì)DML語(yǔ)句影響的每個(gè)行執(zhí)行一次,例如,一條update語(yǔ)句更新了100條數(shù)據(jù),如果我們針對(duì)update定義了行級(jí)觸發(fā)器,那么行級(jí)觸發(fā)器將會(huì)被觸發(fā)100次 。
語(yǔ)句級(jí)觸發(fā)器:對(duì)每個(gè)DML語(yǔ)句執(zhí)行一次,例如,一條update語(yǔ)句更新了200條數(shù)據(jù),如果我們針對(duì)update定義了語(yǔ)句級(jí)觸發(fā)器,那么語(yǔ)句級(jí)觸發(fā)器將會(huì)被觸發(fā)1次 。
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)主表更新后,自動(dòng)更新備份表。
update emp_back set sal=:new.sal where empno=:new.empno;
end ;
/
|
在上面的例子中,當(dāng)我們更新了主表emp的薪水后,這個(gè)行級(jí)觸發(fā)器將會(huì)被自動(dòng)執(zhí)行更新備份表中的員工的薪水。
到此,相信大家對(duì)“怎么利用數(shù)據(jù)庫(kù)觸發(fā)器實(shí)現(xiàn)數(shù)據(jù)的同步”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
名稱欄目:怎么利用數(shù)據(jù)庫(kù)觸發(fā)器實(shí)現(xiàn)數(shù)據(jù)的同步
標(biāo)題鏈接:http://www.rwnh.cn/article16/ggdodg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、服務(wù)器托管、用戶體驗(yàn)、云服務(wù)器、小程序開(kāi)發(fā)、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)