程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle的觸發器

Oracle的觸發器

編輯:Oracle教程

Oracle的觸發器


過去做項目。都是前端後台的編碼。因為數據庫都讓項目經理給寫好的。自己對於數據庫並沒有多少優化,時間久了,反而把數據庫的知識給淡忘了,最近的項目用到的是Oracle數據庫,大家都知道,用到這個數據庫,就是數據量比較大的項目了。對於優化就有必要了。因此自己下班後抽空復習一下,並把這個記錄下來,不只是分享給大家,還能以後自己再次復習。若我講得不對,請留言更正,本人會虛心接受並改更,這樣才能進步。

1.什麼是觸發器

每當一個特定的數操作語句(insert,update,delete)在指定的表上發出時,Oracle自動的執行觸發器中定義的語句序列。這個定義,大家看到就能明白觸發器的作用了,增刪改查,為什麼觸發器沒有查詢呢。因為Oracle的觸發器是針對數據變動時所觸發的一種待定行動。比如你刪除了一個表中的字段,刪除觸發器就會啟動,執行他的命令。同理,修改和增加方法也是一樣。只要你執行了增刪改方法,從而改變了表的數據時,你所設定相應的觸發器就會執行。 例子:每當成功插入新員工後,自動打印一句話“成功插入新員工”;
create trigger saynewemp	//創建一個觸發器 saynewemp是觸發器的名字
after insert			//執行插入方法後觸發
on emp				//針對是哪個表
declare				//聲明
begin				//開始
   dbms_output.put_line("成功插入新員工")	//觸發時打印一句話
end;						//結果
一個員工表的插入觸發器就寫好了。只要我們對員工表執行insert插入操作後,就會執行觸發器中的行為,如上所示,會自動打印一句話。

2.觸發器的應用場景

復雜的安全性檢查數據的確認數據庫的審計數據的備份和同步 第一種:復雜的安全性檢查,就比如我們項目中的需求,如果有周末放假不能對數據庫進行改變,那我們就可以用觸發器對他進行限制 第二種:數據的確認,比如你拿100塊買1塊錢的東西的時候,老板找錢給你時,你是不是要數一數,確認一下是否有沒有錯呢 第三種:數據庫的審計,他是針對數據庫的操作記錄,可以記錄誰對數據庫進行了什麼操作,Oracle已經有自帶的這種功能,我們也可以自己用觸發器實現他 第四種:數據的備份和同步,這個也好理解,就是當你對數據庫進行操作以後,就觸發備份操作,這有點像單機游戲英雄無敵裡的游戲保存一樣,當輪到你操作時,就會自動執 行一次自動保存。

3.創建.觸發器的語法

CREATE[or REPLACE]TRIGGER 觸發器的名字	//創建一個觸發器
{BEFORE|AFTER}				//觸發器執行的順序,是方法前還是方法後執行
{DELETE|INSERT|UPDATE(OF 列名)}		//給哪個方法設置觸發器,在UPDATE方法中,可以用OF指明哪一列名
ON 表名					//哪個表
[FOR EACH ROW[WHEN(條件)]]		//如果有FOR EACH ROW,那就是行級觸發器,反之,就是語句觸發器
PLSQL塊					//執行塊
語句級觸發器:在指定的操作語句操作之前或之後執行一次,不管這條語句影響了多少行,只執行一次。行級觸發器:觸發語句作用的每一條記錄都被觸發,在行級觸發器中使用 :old 和 :new偽記錄變量,識別值的狀態 是不是很抽象呢,其實大家從名字就可以清楚知道他們的分別。我在下面舉例說明吧。 例子:我們要在把員工表中的一個字段數據(有三條)插入到新的一個表中,
	INSERT INTO EMP10 SELECT * FROM EMP WHERE NAME = 10;
如果是語句級觸發器的話,只觸發一次,因為語句級觸發器:針對的是表, 而行級觸發器,前面也說了,是三條記錄,自然會觸發三次行級觸發器,也就是,針對的是行。就如前面的語法中,行級觸發器FOR EACH ROW 語句,後面也可以加WHEN的條件,可以指定哪一行。

這些是觸發器的介紹。看到這裡,大家就能明白觸發器是什麼,干什麼用的,在什麼情景下使用了。雖然這篇很基礎,但對於新人還是有些幫助的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved