久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

SqlServer中觸發(fā)器的作用是什么

158次閱讀
沒有評論

共計 2934 個字符,預(yù)計需要花費 8 分鐘才能閱讀完成。

這期內(nèi)容當中丸趣 TV 小編將會給大家?guī)碛嘘P(guān) SqlServer 中觸發(fā)器的作用是什么,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

查詢數(shù)據(jù)庫中所有觸發(fā)器:

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 觸發(fā)器實例

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 觸發(fā)器實例

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 觸發(fā)器實例

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  刪除成功 

圖文介紹觸發(fā)器

數(shù)據(jù)庫運行環(huán)境 SqlServer2005

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

觸發(fā)器的分類

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

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

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

DML 觸發(fā)器介紹

1 在 SQL SERVER 2008 中,DML 觸發(fā)器的實現(xiàn)使用兩個邏輯表 DELETED 和 INSERTED。這兩個表是建立在數(shù)據(jù)庫服務(wù)器的內(nèi)存中,我們只有只讀的權(quán)限。DELETED 和 INSERED 表的結(jié)構(gòu)和觸發(fā)器所在的數(shù)據(jù)表的結(jié)構(gòu)是一樣的。當觸發(fā)器執(zhí)行完成后,它們也就會被自動刪除:INSERED 表用于存放你在操件 insert、update、delete 語句后,更新的記錄。比如你插入一條數(shù)據(jù),那么就會把這條記錄插入到 INSERTED 表:DELETED 表用于存放你在操作 insert、update、delete 語句前,你創(chuàng)建觸發(fā)器表中數(shù)據(jù)庫。

2 觸發(fā)器可通過數(shù)據(jù)庫中的相關(guān)表實現(xiàn)級聯(lián)更改,可以強制比用 CHECK 約束定義的約束更為復雜的約束。與 CHECK 約束不同,觸發(fā)器可以引用其它表中的列,例如觸發(fā)器可以使用另一個表中的 SELECT 比較插入或更新的數(shù)據(jù),以及執(zhí)行其它操作。觸發(fā)器也可以根據(jù)數(shù)據(jù)修改前后的表狀態(tài),再行采取對策。一個表中的多個同類觸發(fā)器(INSERT、UPDATE 或 DELETE)允許采取多個不同的對策以響應(yīng)同一個修改語句。

3 與此同時,雖然觸發(fā)器功能強大,輕松可靠地實現(xiàn)許多復雜的功能,為什么又要慎用?過多觸發(fā)器會造成數(shù)據(jù)庫及應(yīng)用程序的維護困難,同時對觸發(fā)器過分的依賴,勢必影響數(shù)據(jù)庫的結(jié)構(gòu),同時增加了維護的復雜程序。

觸發(fā)器步驟詳解

1 首先,我們來嘗試創(chuàng)建一個觸發(fā)器,要求就是在 AddTable 這個表上創(chuàng)建一個 Update 觸發(fā)器,語句為:

create trigger mytrigger on AddTablefor update

2 然后就是 sql 語句的部分了,主要是如果發(fā)生 update 以后,要求觸發(fā)器觸發(fā)一個什么操作。這里的意思就是如果出現(xiàn) update 了,觸發(fā)器就會觸發(fā)輸出:the table was updated!—By 小豬也無奈。

3 接下來我們來將 AddTable 表中的數(shù)據(jù)執(zhí)行一個更改的操作:

4 執(zhí)行后,我們會發(fā)現(xiàn),觸發(fā)器被觸發(fā),輸出了我們設(shè)置好的文本:

5 那觸發(fā)器創(chuàng)建以后呢,它就正式開始工作了,這時候我們需要更改觸發(fā)器的話,只需要將開始的 create 創(chuàng)建變?yōu)?alter,然后修改邏輯即可:

6 如果我們想查看某一個觸發(fā)器的內(nèi)容,直接運行:exec sp_helptext [觸發(fā)器名]

7 如果我想查詢當前數(shù)據(jù)庫中有多少觸發(fā)器,以方便我進行數(shù)據(jù)庫維護,只需要運行:

select * from sysobjects where xtype= TR

8 我們?nèi)绻枰P(guān)閉或者開啟觸發(fā)器的話,只需要運行:

disable trigger [觸發(fā)器名] on database – 禁用觸發(fā)器

enable trigger [觸發(fā)器名] on database – 開啟觸發(fā)器

9 那觸發(fā)器的功能雖大,但是一旦觸發(fā),恢復起來就比較麻煩了,那我們就需要對數(shù)據(jù)進行保護,這里就需要用到 rollback 數(shù)據(jù)回滾~

10 第九步的意思就是查詢 AddTable 表,如果里面存在 TableName=newTable 的,數(shù)據(jù)就回滾,觸發(fā)器中止,那我們再進行一下測試,對 AddTable 表進行更改,發(fā)現(xiàn),觸發(fā) update 觸發(fā)器之后,因為有數(shù)據(jù)保護,觸發(fā)器中止:

注意事項

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

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

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

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-01發(fā)表,共計2934字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 政和县| 卓尼县| 宣威市| 武城县| 兰溪市| 阳曲县| 荣成市| 镇平县| 绥宁县| 峨眉山市| 墨脱县| 岫岩| 梅州市| 开平市| 卫辉市| 宝山区| 瓦房店市| 门源| 南溪县| 通榆县| 焉耆| 体育| 广南县| 翁牛特旗| 温泉县| 合山市| 天全县| 叶城县| 庐江县| 皮山县| 赣榆县| 石城县| 柳河县| 青龙| 鄄城县| 义马市| 平潭县| 松江区| 军事| 洪江市| 杭锦旗|