SQL Server SQL觸發器經驗詳解

2022-04-04 03:27:24 字數 2813 閱讀 4743

2511

全文閱讀分步閱讀

加入雜誌

步驟自從上次在經驗中使用了觸發器,有讀者詢問我一些關於觸發器的相關資訊,個人推薦首先你需要先去把觸發器最基礎的東西了解清楚,然後通過這次的經驗,希望能在你理解的基礎上,加深你對觸發器的了解,能夠在需要的時候想到觸發器的功能或許能夠幫你實現某種效果。

1觸發器(trigger)是個特殊的儲存過程,它的執行不是由程式呼叫,也不是手工啟動,而是由事件來觸發,當對乙個表進行操作( insert,delete, update)時就會啟用它執行,觸發器經常用於加強資料的完整性約束和業務規則等。其實往簡單了說,就是觸發器就是乙個開關,負責燈的亮與滅,你動了,它就亮了,就這個意思。

1dml( 資料操縱語言 data manipulation language)觸發器:是指觸發器在資料庫中發生dml事件時將啟用。dml事件即指在表或檢視中修改資料的insert、update、delete語句。

2ddl(資料定義語言 data definition language)觸發器:是指當伺服器或資料庫中發生(ddl事件時將啟用。ddl事件即指在表或索引中的create、alter、drop語句也。

3登陸觸發器:是指當使用者登入sql server例項建立會話時觸發。

1在sql server 2008中,dml觸發器的實現使用兩個邏輯表deleted和inserted。這兩個表是建立在資料庫伺服器的記憶體中,我們只有唯讀的許可權。deleted和insered表的結構和觸發器所在的資料表的結構是一樣的。當觸發器執行完成後,它們也就會被自動刪除:insered表用於存放你在操件insert、update、delete語句後,更新的記錄。比如你插入一條資料,那麼就會把這條記錄插入到inserted表:deleted表用於存放你在操作 insert、update、delete語句前,你建立觸發器表中資料庫。

2觸發器可通過資料庫中的相關表實現級聯更改,可以強制比用check約束定義的約束更為複雜的約束。與 check 約束不同,觸發器可以引用其它表中的列,例如觸發器可以使用另乙個表中的 select 比較插入或更新的資料,以及執行其它操作。觸發器也可以根據資料修改前後的表狀態,再行採取對策。乙個表中的多個同類觸發器(insert、update 或 delete)允許採取多個不同的對策以響應同乙個修改語句。

3與此同時,雖然觸發器功能強大,輕鬆可靠地實現許多複雜的功能,為什麼又要慎用?過多觸發器會造成資料庫及應用程式的維護困難,同時對觸發器過分的依賴,勢必影響資料庫的結構,同時增加了維護的複雜程式。

1首先,我們來嘗試建立乙個觸發器,要求就是在addtable這個表上建立乙個update觸發器,語句為:

2然後就是sql語句的部分了,主要是如果發生update以後,要求觸發器觸發乙個什麼操作。這裡的意思就是如果出現update了,觸發器就會觸發輸出:the table was updated!---by 小豬也無奈。

3接下來我們來將addtable表中的資料執行乙個更改的操作:

4執行後,我們會發現,觸發器被觸發,輸出了我們設定好的文字:

5那觸發器建立以後呢,它就正式開始工作了,這時候我們需要更改觸發器的話,只需要將開始的create建立變為alter,然後修改邏輯即可:

6如果我們想檢視某乙個觸發器的內容,直接執行:exec sp_helptext [觸發器名]

7如果我想查詢當前資料庫中有多少觸發器,以方便我進行資料庫維護,只需要執行: select * from sysobjects where xtype='tr'

8我們如果需要關閉或者開啟觸發器的話,只需要執行:

disable trigger [觸發器名] on database --禁用觸發器

enable trigger [觸發器名] on database --開啟觸發器

9那觸發器的功能雖大,但是一旦觸發,恢復起來就比較麻煩了,那我們就需要對資料進行保護,這裡就需要用到rollback資料回滾~

10第九步的意思就是查詢addtable表,如果裡面存在tablename=newtable的,資料就回滾,觸發器中止,那我們再進行一下測試,對addtable表進行更改,發現,觸發update觸發器之後,因為有資料保護,觸發器中止:

觸發器 mysql觸發器

觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...

觸發器(五 復合觸發器)

oracle11g開始提供了一種復合觸發器,簡單的說就是支援把語句級和行級觸發器組合在一起。實際應用場景不多,這裡就做個記錄。與單個觸發器語法有所區別 1.單個觸發器的頭部是 before after 動作 on 物件 for 觸發級別 而組合觸發器的頭部是 for 動作 on 物件 compoun...

mysql觸發器when MySQL觸發器

set quoted identifier on goset ansi nulls on goalter trigger trg risks on dbo.projectrisk for insert,update asbegin update projectrisk set classificat...