在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

觸發器的工作原理及作用

jf_78858299 ? 來源:SQL數據庫開發 ? 作者:丶平凡世界 雜貨鋪 ? 2023-03-23 16:07 ? 次閱讀

觸發器的定義

觸發器(trigger)是SQL Server提供給程序員和數據分析員來保證數據完整性的一種方法,它是與表事件相關的特殊的存儲過程,它的執行不是由程序調用,也不是手工啟動,而是由事件來觸發,比如當對一個表進行操作( INSERT,DELETE, UPDATE)時就會激活它執行。

觸發器的作用

觸發器的主要作用就是其能夠實現由主鍵和外鍵所不能保證的復雜參照完整性和數據的一致性,它能夠對數據庫中的相關表進行級聯修改,提高比CHECK約束更復雜的的數據完整性,并自定義錯誤消息。

觸發器的主要作用主要有以下接個方面

  • 強制數據庫間的引用完整性
  • 級聯修改數據庫中所有相關的表,自動觸發其它與之相關的操作
  • 跟蹤變化,撤銷或回滾違法操作,防止非法修改數據
  • 返回自定義的錯誤消息,約束無法返回信息,而觸發器可以
  • 觸發器可以調用更多的存儲過程

觸發器的優點

  • 觸發器是自動的。當對表中的數據做了任何修改之后立即被激活。
  • 觸發器可以通過數據庫中的相關表進行層疊修改。
  • 觸發器可以強制限制。這些限制比用CHECK約束所定義的更復雜。與CHECK約束不同的是,觸發器可以引用其他表中的列。

觸發器的分類

?SQL Server包括三種常規類型的觸發器:DML觸發器、DDL觸發器和登錄觸發器。

DML(數據操作語言,Data Manipulation Language)觸發器

DML觸發器是一些附加在特定表或視圖上的操作代碼,當數據庫服務器中發生數據操作語言事件時執行這些操作。

SQL Server中的DML觸發器有三種:

  • INSERT觸發器:向表中插入數據時被觸發;
  • DELETE觸發器:從表中刪除數據時被觸發;
  • UPDATE觸發器:修改表中數據時被觸發。

當遇到下列情形時,應考慮使用DML觸發器:

  • 通過數據庫中的相關表實現級聯更改
  • 防止惡意或者錯誤的INSERT、DELETE和UPDATE操作,并強制執行CHECK約束定義的限制更為復雜的其他限制。
  • 評估數據修改前后表的狀態,并根據該差異才去措施。

DDL(數據定義語言,Data Definition Language)觸發器

DDL觸發器是當服務器或者數據庫中發生數據定義語言(主要是CREATE,DROP,ALTER開頭的語句)事件時被激活使用,使用DDL觸發器可以防止對數據架構進行的某些更改或記錄數據中的更改或事件操作。

登錄觸發器

登錄觸發器將為響應 LOGIN 事件而激發存儲過程。與 SQL Server 實例建立用戶會話時將引發此事件。登錄觸發器將在登錄的身份驗證階段完成之后且用戶會話實際建立之前激發。因此,來自觸發器內部且通常將到達用戶的所有消息(例如錯誤消息和來自 PRINT 語句的消息)會傳送到 SQL Server 錯誤日志。如果身份驗證失敗,將不激發登錄觸發器。

觸發器的工作原理

觸發器觸發時:

  • 系統自動在內存中創建INSERTED表或DELETED表;
  • 只讀,不允許修改,觸發器執行完成后,自動刪除。

INSERTED表:

  • 臨時保存了插入或更新后的記錄行;
  • 可以從INSERTED表中檢查插入的數據是否滿足業務需求;
  • 如果不滿足,則向用戶發送報告錯誤消息,并回滾插入操作。

DELETED表:

  • 臨時保存了刪除或更新前的記錄行;
  • 可以從DELETED表中檢查被刪除的數據是否滿足業務需求;
  • 如果不滿足,則向用戶報告錯誤消息,并回滾插入操作。

INSERTED表和DELETED表對照:

修改操作記錄 INSERTED DELETED
增加(INSERT)記錄 存放新增的記錄 /
刪除(DELETE)記錄 / 存放被刪除的記錄
修改(UPDATE)記錄 存放更新后的記錄 存放更新前的記錄

創建觸發器

創建觸發器的語法:

CREATE TRIGGER trigger_name ON table_name

[WITH ENCRYPTION]

FOR | AFTER | INSTEAD

OF [DELETE, INSERT, UPDATE]

AS

T-SQL語句

GO

注:

*WITH ENCRYPTION 表示加密觸發器定義的SQL文本

DELETE, INSERT, UPDATE指定觸發器的類型*

觸發器示例

創建學生表

create table student(    
stu_id int identity(1,1) primary key,    
stu_name varchar(10),    
stu_gender char(2),    
stu_age int
)

(提示:可以左右滑動代碼)

創建INSERT觸發器

--創建INSERT觸發器
create trigger trig_insert
on student after insert
as
begin    
  --判斷student_sum表是否存在        
  if object_id(N'student_sum',N'U') is null
  --創建存儲學生人數的student_sum表    
  create table student_sum(
  stuCount int default(0)
  );
  declare @stuNumber int;
  select @stuNumber = count(*)from student;
  --判斷表中是否有記錄
  if not exists (select * from student_sum)        
  insert into student_sum values(0);
  update student_sum set stuCount =@stuNumber; 
  --把更新后總的學生數插入到student_sum表中
end


--測試觸發器trig_insert
--功能是向student插入數據的同時級聯插入到student_sum表中,更新stuCount
--因為是后觸發器,所以先插入數據后,才觸發觸發器trig_insert;
insert into student(stu_name,stu_gender,stu_age)
values('呂布','男',30);
select stuCount 學生總人數 from student_sum;     
insert into student(stu_name,stu_gender,stu_age)
values('貂蟬','女',30);             
select stuCount 學生總人數 from student_sum;
insert into student(stu_name,stu_gender,stu_age)
values('曹阿瞞','男',40);                 
select stuCount 學生總人數 from student_sum;

執行上面的語句后,結果如下圖所示:

圖片

既然定義了學生總數表student_sum表是向student表中插入數據后才計算學生總數的,所以學生總數表應該禁止用戶向其中插入數據

--創建insert_forbidden,禁止用戶向student_sum表中插入數據
create trigger insert_forbidden
on student_sum after insert
as
begin    
  RAISERROR('禁止直接向該表中插入記錄,操作被禁止',1,1)
  --raiserror 是用于拋出一個錯誤
  rollback transaction
end
--觸發觸發器insert_forbidden
insert student_sum (stuCount) 
values(5);

結果如下:

圖片

創建DELETE觸發器

用戶執行DELETE操作,就會激活DELETE觸發器,從而控制用戶能夠從數據庫中刪除數據記錄,觸發DELETE觸發器后,用戶刪除的記錄會被添加到DELETED表中,原來表的相應記錄被刪除,所以在DELETED表中查看刪除的記錄。

--創建delete觸發器
create trigger trig_delete
on student after delete
as
begin    
  select stu_id as 已刪除的學生編號,
  stu_name stu_gender,
  stu_age
  from deleted
end;


--執行一條delete語句觸發trig_delete觸發器
delete from student where stu_id=1;

結果如下:

圖片

創建UPDATE觸發器

UPDATE觸發器是當用戶在指定表上執行UPDATE語句時被調用被調用,這種類型的觸發器用來約束用戶對數據的修改。UPDATE觸發器可以執行兩種操作:更新前的記錄存儲在DELETED表中,更新后的記錄存儲在INSERTED表中。

--創建update觸發器
create trigger trig_update
on student after update
as
begin    
  declare @stuCount int;
  select @stuCount=count(*) from student;
  update student_sum set stuCount =@stuCount;

  select stu_id as 更新前學生編號,
  stu_name as 更新前學生姓名 from deleted;

  select stu_id as 更新后學生編號,
  stu_name as 更新后學生姓名 from inserted;
end
--創建完成,執行一條update語句觸發trig_update觸發器
update student set stu_name='張飛' 
where stu_id=2;

結果如下:

圖片

創建替代觸發器

與前面介紹的三種AFTER觸發器不同,SQL Server服務器在執行AFTER觸發器的SQL代碼后,先建立臨時的INSERTED表和DELETED表,然后執行代碼中對數據庫操作,最后才激活觸發器中的代碼。而對于替代(INSTEAD OF)觸發器,SQL Server服務器在執行觸發INSTEAD OF觸發器的代碼時,先建立臨時的INSERTED表和DELETED表,然后直接觸發INSTEAD OF觸發器,而拒絕執行用戶輸入的DML操作語句。

--創建instead of觸發器 
create trigger trig_insteadOf
on student instead of insert
as 
begin    
  declare @stuAge int;
  select @stuAge=(select stu_age from inserted)
  if(@stuAge >120)
  select '插入年齡錯誤' as '失敗原因'
end

創建完成,執行一條INSERT語句觸發觸發器trig_insteadOf

圖片

批注

觸發器在早期的數據處理過程中經常使用到,特別是在處理一些因某些動作而需要對其他表進行調整的邏輯時。但是隨著數據量的增長,觸發器對數據庫的性能影響越來越大,容易造成數據庫性能降低。所以觸發器在數據量大的場景是禁止使用的,但是其邏輯處理功能還是被一直保留,說明其還是有較深的應用場景,需要我們掌握它的相關用法。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7104

    瀏覽量

    89293
  • SQL
    SQL
    +關注

    關注

    1

    文章

    771

    瀏覽量

    44192
  • 程序
    +關注

    關注

    117

    文章

    3793

    瀏覽量

    81224
  • 觸發器
    +關注

    關注

    14

    文章

    2000

    瀏覽量

    61258
收藏 人收藏

    評論

    相關推薦

    什么是觸發器 觸發器工作原理作用

    ”,分別稱為置“1”端和置“0”端。常見的觸發器有R-S觸發器、D觸發器和J-K觸發器等三種,下面簡單說明它們的工作原理。類型種類按邏輯功能
    發表于 12-25 17:09

    鎖存觸發器工作原理是什么

    鎖存工作原理是什么?鎖存的動態特性及其應用有哪些?觸發器工作原理是什么?觸發器的電路結構
    發表于 11-03 06:48

    rs觸發器工作原理

    rs觸發器工作原理 一、電路組成及符號 基本RS
    發表于 01-21 13:23 ?1.2w次閱讀
    rs<b class='flag-5'>觸發器</b><b class='flag-5'>工作原理</b>

    CMOS觸發器的結構與工作原理

    CMOS觸發器的結構與工作原理     CMOS D觸發器足主-從結構形式的一種邊沿觸發器,CMOS T型觸發器
    發表于 10-17 08:52 ?7601次閱讀
    CMOS<b class='flag-5'>觸發器</b>的結構與<b class='flag-5'>工作原理</b>

    JK觸發器工作原理詳細介紹

    JK觸發器工作原理詳細介紹 JK觸發器,采用與或非電路結構,它的工作原理為:CP為0時,觸發器處于一個穩態;CP由0變1時,
    發表于 03-08 13:47 ?5.3w次閱讀

    D觸發器工作原理是什么?

    D觸發器工作原理是什么? 邊沿D 觸發器: 負跳沿觸發的主從觸發器工作時,必須在正跳沿前加
    發表于 03-08 13:56 ?7w次閱讀
    D<b class='flag-5'>觸發器</b><b class='flag-5'>工作原理</b>是什么?

    什么是RS觸發器,RS觸發器工作原理是什么?

    什么是RS觸發器,RS觸發器工作原理是什么? 主從RS觸發器
    發表于 03-08 14:00 ?3.1w次閱讀

    施密特觸發器電路及工作原理詳解_施密特觸發器特點_施密特觸發器作用

    本文介紹了什么是施密特觸發器、施密特觸發器的主要特點,其次介紹了施密特觸發器電路工作原理詳解,最后介紹了施密特觸發器的具體
    發表于 01-16 11:50 ?4.7w次閱讀
    施密特<b class='flag-5'>觸發器</b>電路及<b class='flag-5'>工作原理</b>詳解_施密特<b class='flag-5'>觸發器</b>特點_施密特<b class='flag-5'>觸發器</b>的<b class='flag-5'>作用</b>

    jk邊沿觸發器工作原理

    本文開始介紹了JK觸發器工作特性與邊沿JK觸發器的特點,其次介紹了邊沿JK觸發器工作原理與特點,最后介紹了集成邊沿式JK
    發表于 01-30 17:17 ?3.7w次閱讀
    jk邊沿<b class='flag-5'>觸發器</b><b class='flag-5'>工作原理</b>

    一文看懂單穩態觸發器工作原理作用

    本文開始介紹了單穩態觸發器電路組成和單穩態觸發器的四種基本電路圖,其次詳細闡述了單穩態觸發器工作原理,最后介紹了單穩態觸發器
    的頭像 發表于 03-27 10:02 ?7.6w次閱讀
    一文看懂單穩態<b class='flag-5'>觸發器</b><b class='flag-5'>工作原理</b>及<b class='flag-5'>作用</b>

    觸發器作用_觸發器的特點介紹

    本文開始介紹了觸發器的定義和觸發器的特點,其次闡述了觸發器的分類和觸發器作用,最后介紹了觸發器
    發表于 03-27 17:35 ?2.2w次閱讀

    單穩態觸發器有哪些_單穩態觸發器工作原理介紹

    本文開始闡述了單穩態觸發器工作特點和單穩態觸發器的分類,其次闡述了單穩態觸發器工作原理,最后介紹了常用的CD4098單穩態
    的頭像 發表于 03-28 15:41 ?4.2w次閱讀
    單穩態<b class='flag-5'>觸發器</b>有哪些_單穩態<b class='flag-5'>觸發器</b><b class='flag-5'>工作原理</b>介紹

    單穩態觸發器芯片有哪些_單穩態觸發器工作原理

    本文主要介紹了單穩態觸發器芯片有哪些_單穩態觸發器工作原理。單穩態觸發器只有一個穩定狀態,一個暫穩態。在外加脈沖的作用下,單穩態
    的頭像 發表于 03-28 18:22 ?3w次閱讀
    單穩態<b class='flag-5'>觸發器</b>芯片有哪些_單穩態<b class='flag-5'>觸發器</b><b class='flag-5'>工作原理</b>

    jk觸發器和t觸發器工作原理、特點和應用

    JK觸發器和T觸發器都是數字電路中常用的觸發器,它們在存儲和傳遞信息方面發揮著重要作用。然而,它們在功能和應用上存在一定的差異。 一、JK觸發器
    的頭像 發表于 08-28 09:43 ?4441次閱讀

    rs觸發器工作原理 rs觸發器和sr觸發器的區別

    RS觸發器(Reset-Set觸發器)和SR觸發器(Set-Reset觸發器)是數字電路中常用的兩種基本觸發器。它們在邏輯功能和應用上有所不
    的頭像 發表于 10-21 10:06 ?3787次閱讀
    主站蜘蛛池模板: 2017亚洲男人天堂| 中文天堂网| 赛罗奥特曼银河帝国普通话免费版| 国产精品三级a三级三级午夜| 毛片美女| 在线播放真实国产乱子伦| 精品福利在线视频| 天天爽夜夜| 亚洲小视频| 久久综合欧美成人| 欧美日韩乱国产| 婷婷开心六月久久综合丁香| 在线黄色免费网站| 天堂免费观看| 久久草精品| 1024手机在线看| 亚洲综合一二三区| 欧美性区| 欧美性aaa| 婷婷开心激情网| 男人天堂网在线播放| 成人区精品一区二区毛片不卡| 精品国产乱码久久久久久浪潮 | 天天综合天天综合色在线| 男人天堂资源站| 免费啪视频在线观看免费的| 好紧好爽太大了h快穿| 色综合久久综合欧美综合图片| 久久青草视频| 六月婷婷久久| 在线观看高清免费播放| 极品丰满翘臀后进啪啪| 亚洲一区中文字幕在线观看| 午夜宅男视频| 久久久久久久久综合影视网| 午夜小视频男女在线观看| 国产精品天天影视久久综合网| 黄网站色| 男女视频在线看| 国产精品自线在线播放| 色多多网|