中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

SqlServer中觸發器的作用是什么

發布時間:2021-08-13 15:52:49 來源:億速云 閱讀:165 作者:Leah 欄目:數據庫

這期內容當中小編將會給大家帶來有關SqlServer中觸發器的作用是什么,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

查詢數據庫中所有觸發器:

select * from sysobjects where xtype='TR'

1、語法

create trigger [shema_name . ] trg_nameon { table | view }[ with encryption ]{ for | after | instead of }{ insert , update , delete }assql_statement

insert觸發器實例

create trigger teston alfor insertasdeclare @id int,@uid int,@lid int,@result charselect @id=id,@uid=uid,@lid=lid,@result=result from insertedif(@lid=4)begin update al set uid=99 where id=@id print 'lid=4時自動修改用戶id為99'end

update觸發器實例

create trigger test_updateon al for updateas declare @oldid int,@olduid int,@oldlid int,@newid int,@newuid int,@newlid int select @oldid=id,@olduid=uid,@oldlid=lid from deleted; select @newid=id,@newuid=uid,@newlid=lid from inserted if(@newlid>@oldlid) begin print 'newlid>oldid' rollback tran; end else print '修改成功'

delete觸發器實例

create trigger test_deleteon alfor deleteasdeclare @did int,@duid int,@dlid intselect @did=id,@duid=uid,@dlid=lid from deletedif(exists(select * from list where @dlid=id))beginprint '無法刪除'rollback tran;endelseprint '刪除成功'

圖文介紹觸發器

數據庫運行環境SqlServer2005

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

觸發器的分類

1 DML( 數據操縱語言 Data Manipulation Language)觸發器:是指觸發器在數據庫中發生DML事件時將啟用。DML事件即指在表或視圖中修改數據的insert、update、delete語句。

2 DDL(數據定義語言 Data Definition Language)觸發器:是指當服務器或數據庫中發生(DDL事件時將啟用。DDL事件即指在表或索引中的create、alter、drop語句也。

3 登陸觸發器:是指當用戶登錄SQL SERVER實例建立會話時觸發。

DML觸發器介紹

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觸發器,語句為:

create trigger mytrigger on AddTablefor 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觸發器之后,因為有數據保護,觸發器中止:

注意事項

禁用和開啟觸發器都需要一定的權限,如果權限不夠是無法進行操作的。

注意運行后的錯誤提示,對于糾正錯誤是很有幫助的。

上述就是小編為大家分享的SqlServer中觸發器的作用是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

闵行区| 景德镇市| 长治县| 虞城县| 城固县| 临汾市| 扬中市| 张家界市| 庆阳市| 固阳县| 临湘市| 朝阳市| 奎屯市| 黔南| 西充县| 靖安县| 闻喜县| 三穗县| 洞口县| 怀柔区| 钟祥市| 贵定县| 杂多县| 凌海市| 广州市| 张家川| 达孜县| 洞头县| 勃利县| 绩溪县| 汤阴县| 烟台市| 兖州市| 敖汉旗| 新平| 任丘市| 和硕县| 措勤县| 天柱县| 镇远县| 新和县|