国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

一文看懂SQL Server數據庫觸發器概念、原理及案例

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

[[284303]]

概述

觸發器(trigger)是SQL server 提供給程序員和數據分析員來保證數據完整性的一種方法,它是與表事件相關的特殊的存儲過程,它的執行不是由程序調用,也不是手工啟動,而是由事件來觸發,當對一個表進行操作( insert,delete, update)時就會激活它執行。觸發器經常用于加強數據的完整性約束和業務規則等。 

一文看懂SqlServer數據庫觸發器概念、原理及案例

一、觸發器的優點

1.觸發器是自動的。當對表中的數據做了任何修改之后立即被激活。

2.觸發器可以通過數據庫中的相關表進行層疊修改。

3.觸發器可以強制限制。這些限制比用CHECK約束所定義的更復雜。與CHECK約束不同的是,觸發器可以引用其他表中的列。

二、觸發器的分類

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

一文看懂SqlServer數據庫觸發器概念、原理及案例

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

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

insert觸發器:向表中插入數據時被觸發;

delete觸發器:從表中刪除數據時被觸發;

update觸發器:修改表中數據時被觸發。

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

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

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

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

3.登錄觸發器

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

三、觸發器的工作原理

[DELETE, INSERT, UPDATE]對應為當執行刪除、插入、更新三種動作時被觸發

執行insert時,獲取插入后的數據,可用select*from inserted讀取

執行delete時,獲取刪除前的數據,可用select*from deleted讀取

執行update時,獲取更新前的數據,可用select*from deleted讀取,獲取更新后數據,可用select*from inserted讀取 

一文看懂SqlServer數據庫觸發器概念、原理及案例

四、創建觸發器

1、創建觸發器的語法:

  1. CREATE TRIGGER trigger_name 
  2.  ON table_name 
  3.  [WITH ENCRYPTION] 
  4.  FOR | AFTER | INSTEAD OF [DELETEINSERTUPDATE
  5.  AS  
  6.  T-SQL語句 
  7. GO 
  8. --with encryption 表示加密觸發器定義的sql文本 
  9. --delete,insert,update指定觸發器的類型 

2、創建insert觸發器

  1. --創建insert觸發器 
  2. create trigger trig_insert 
  3. on student 
  4. after insert 
  5. as 
  6. begin 
  7.  if object_id(N'student_sum',N'U'is null--判斷student_sum表是否存在 
  8.  create table student_sum(stuCount int default(0));--創建存儲學生人數的student_sum表 
  9.  declare @stuNumber int
  10.  select @stuNumber = count(*)from student; 
  11.  if not exists (select * from student_sum)--判斷表中是否有記錄 
  12.  insert into student_sum values(0); 
  13.  update student_sum set stuCount =@stuNumber; --把更新后總的學生數插入到student_sum表中 
  14. end 
  15. --測試觸發器trig_insert-->功能是向student插入數據的同時級聯插入到student_sum表中,更新stuCount 
  16. --因為是后觸發器,所以先插入數據后,才觸發觸發器trig_insert; 
  17. insert into student(stu_name,stu_gender,stu_age)values('呂布','男',30); 
  18. select stuCount 學生總人數 from student_sum;  
  19. insert into student(stu_name,stu_gender,stu_age)values('貂蟬','女',30);  
  20. select stuCount 學生總人數 from student_sum; 
  21. insert into student(stu_name,stu_gender,stu_age)values('曹阿瞞','男',40);  
  22. select stuCount 學生總人數 from student_sum; 

3、創建delete觸發器

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

  1. --創建delete觸發器 
  2. create trigger trig_delete 
  3. on student  
  4. after delete 
  5. as 
  6. begin 
  7.  select stu_id as 已刪除的學生編號,stu_name stu_gender,stu_age 
  8.  from deleted 
  9. end
  10. --執行一一條delete語句觸發trig_delete觸發器 
  11. delete from student where stu_id=1; 

4、創建UPDATE觸發器

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

  1. --創建update觸發器 
  2. create trigger trig_update 
  3. on student 
  4. after update 
  5. as 
  6. begin 
  7.  declare @stuCount int
  8.  select @stuCount=count(*) from student; 
  9.  update student_sum set stuCount =@stuCount; 
  10.  select stu_id as 更新前學生編號,stu_name as 更新前學生姓名 from deleted 
  11.  select stu_id as 更新后學生編號,stu_name as 更新后學生姓名 from inserted 
  12. end 
  13. --創建完成,執行一條update語句觸發trig_update觸發器 
  14. update student set stu_name='張飛' where stu_id=2; 

五、管理觸發器

1.查看觸發器

(1).查看數據庫中所有的觸發器

  1. --查看數據庫中所有的觸發器 
  2. use 數據庫名 
  3. go 
  4. select * from sysobjects where xtype='TR' 

sysobjects 保存著數據庫的對象,其中 xtype 為 TR 的記錄即為觸發器對象。在 name 一列,我們可以看到觸發器名稱。

(2).sp_helptext 查看觸發器內容

  1. use 數據庫名 
  2. go 
  3. exec sp_helptext '觸發器名稱' 

將會以表的樣式顯示觸發器內容。

除了觸發器外,sp_helptext 還可以顯示 規則、默認值、未加密的存儲過程、用戶定義函數、視圖的文本。

(3).sp_helptrigger 用于查看觸發器的屬性

sp_helptrigger 有兩個參數:第一個參數為表名;第二個為觸發器類型,為 char(6) 類型,可以是 INSERT、UPDATE、DELETE,如果省略則顯示指定表中所有類型觸發器的屬性。

  1. --查看數據庫中所有的觸發器 
  2. use 數據庫名 
  3. go 
  4. select * from sysobjects where xtype='TR' 

use 數據庫名goexec sp_helptrigger tableName

2.禁用啟用觸發器

禁用:alter table 表名 disable trigger 觸發器名稱

啟用:alter table 表名 enable trigger 觸發器名稱

如果有多個觸發器,則各個觸發器名稱之間用英文逗號隔開。

如果把“觸發器名稱”換成“ALL”,則表示禁用或啟用該表的全部觸發器。

3.修改觸發器

  1. --修改觸發器語法 
  2. ALTER TRIGGER trigger_name  
  3.  ON table_name  
  4.  [ WITH ENCRYPTION ]  
  5.  FOR {[DELETE][,][INSERT][,][UPDATE]} 
  6.  AS 
  7.  sql_statement; 

4.刪除觸發器

  1.  --語法格式: 
  2.  DROP TRIGGER { trigger } [ ,...n ] 
  3. 參數: 
  4.  trigger: 要刪除的觸發器名稱 
  5.  n:表示可以刪除多個觸發器的占位符   

 

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2019-10-22 07:50:45

SqlServer數據庫觸發器

2010-06-30 09:36:25

SQL Server

2011-04-01 16:35:09

SQL Server數觸發器

2010-09-13 16:46:10

SQL Server觸

2010-07-23 15:26:29

SQL Server

2010-07-06 14:47:03

SQL Server數

2023-12-18 10:45:31

2019-09-11 09:37:17

數據庫MySQL系統

2020-03-23 23:26:12

數據庫服務器優化

2009-04-07 13:56:03

SQL Server觸發器實例

2010-09-13 17:03:34

sql server觸

2019-02-26 15:20:31

CPU開蓋器結構

2010-07-05 11:01:37

Sql Server觸

2020-03-31 14:40:24

HashMap源碼Java

2017-04-17 13:10:09

神經網絡人工智能網絡

2020-04-14 11:14:02

PostgreSQL分布式數據庫

2010-10-13 09:30:45

SQL Server

2019-09-17 08:23:35

MySQL數據庫容量

2011-03-03 14:04:48

Oracle數據庫觸發器

2016-08-18 00:21:12

網絡爬蟲抓取網絡
點贊
收藏

51CTO技術棧公眾號

免费男女羞羞的视频网站中文版 | 中文字幕视频一区二区在线有码 | 国产午夜精品一区二区三区嫩草 | 欧美图区在线视频| 亚洲一品av免费观看| 男人本色网站| 91色在线porny| 精品国产免费一区二区三区四区 | 亚洲国产精品久久久久婷婷884| 老司机午夜精品99久久| 国产一区二区三区四区五区美女| 日韩欧美一级在线播放| 欧美日韩成人精品| 黄色一级视频播放| 97精品资源在线观看| 精品国产污网站| 2024最新电影免费在线观看| 精品日韩中文字幕| 精彩国产在线| 亚洲精品va在线观看| 91国产成人在线| 久久精品五月婷婷| 在线天堂av| 欧美性猛交xxxxx水多| 国产在线观看黄| 欧美一区二区视频免费观看| 俄罗斯精品一区二区三区| 夜色福利资源站www国产在线视频| 亚洲免费av在线| 深夜视频在线免费| 免费观看30秒视频久久| 日韩国产精品视频| 亚洲精品国产嫩草在线观看| 一本色道久久综合狠狠躁篇怎么玩 | 一区二区三区午夜探花| 国产日韩在线一区二区三区| а√天堂中文在线资源8| 精品国产伦一区二区三区免费| 特级毛片在线| 国产91在线|亚洲| 亚洲一区二区蜜桃| 一本色道综合亚洲| h视频在线免费观看| 午夜日韩av| 亚洲乱码国产乱码精品精98午夜| 欧美午夜精品久久久久久浪潮| 亚洲午夜在线观看| 中文字幕av不卡| 黄色在线免费网站| 韩国精品在线观看| 天堂资源在线观看| 色天天综合狠狠色| 欧美午夜不卡| 好吊的妞视频这里都有| 亚洲毛片在线观看| 蜜桃av综合| 91视频婷婷| 最新久久zyz资源站| 免费视频爱爱太爽了| 一区二区三区国产| 国产美女视频一区二区| 亚洲精品第一页| 欧美黄在线观看| 国精产品999国精产品官网| 国产丝袜视频一区| 亚洲综合日韩| caoporn国产精品免费视频 | 奇米777日韩| 亚洲国产精品va在线观看黑人| 曰本一区二区三区视频| 加勒比成人在线| 亚洲视频在线免费观看| av免费网站在线观看| 999视频在线免费观看| 激情成人在线视频| 午夜精品视频一区二区三区在线看| 欧美日韩高清在线观看| 国产伦精品一区二区三区视频青涩 | 日韩欧美亚洲成人| 伊人情人综合网| 91成人高清| 欧美乱做爰xxxⅹ久久久| 国产成人欧美日韩在线电影| 国产一二三四区在线观看| 26uuuu精品一区二区| 成人午夜一级| 欧美尤物巨大精品爽| 一区二区三区欧美日| 亚洲精品国产成人影院| 黄网页在线观看| 免费看av软件| 欧美激情一区二区三区成人| 亚洲人被黑人高潮完整版| 粗大黑人巨茎大战欧美成人| 日本黑人久久| 久久久久久久久网站| 国产麻豆成人传媒免费观看| 天天想你在线观看完整版电影免费| 亚洲桃花岛网站| 亚洲综合激情小说| 97se亚洲国产一区二区三区| 精品伦理一区二区| 久久草.com| 久久亚洲欧美日韩精品专区 | 欧美男gay| 超碰在线免费播放| xx欧美撒尿嘘撒尿xx| 狠狠色噜噜狠狠狠狠色吗综合| 日韩精品中文字幕在线| 一区二区在线观看免费| 久久精品国产在热久久| 久久一区二区三区电影| 日韩在线免费| 香港伦理在线| 成年在线播放小视频| 亚洲一区二区久久| 亚洲一二三专区| 2020国产精品| 久久久久欧美精品| 任你躁在线精品免费| 国产精品蜜月aⅴ在线| 免费的黄网站在线观看| 国产一线二线三线在线观看| 六十路精品视频| 天天色 色综合| www精品美女久久久tv| 蜜臀av亚洲一区中文字幕| 亚洲九九精品| 欧美视频二区| 91成人精品| 色成人综合网| 成人免费毛片在线观看| 国产精品日韩精品| 日韩欧美在线一区| 亚洲1区在线观看| 欧美一区二区三区四区五区六区 | 先锋影音男人资源| 五月天av影院| 国产黄色片免费在线观看| 女人床在线观看| 免费在线a视频| 日韩欧美国产综合一区 | 鲁鲁在线中文| 最新欧美电影| 99精品国产一区二区三区2021| 日本精品网站| 日韩欧美视频网站| 日本亚洲欧洲色α| 91精品久久久久久久久久久久久久| 国产成人福利视频| 国产精品三区在线| 一区二区91美女张开腿让人桶| 成人污网站在线观看| 九色在线91| 国内在线精品| 国产91在线播放精品| 综合色就爱涩涩涩综合婷婷| 第一sis亚洲原创| 久久亚洲视频| 动漫av一区| 欧美1区2区| av日韩在线网站| 欧美亚洲福利| 天堂av中文在线| 国产福利第一视频在线播放| 国产欧美日韩一区二区三区| 久久综合入口| 色视频网站在线| 白白色在线观看| 欧美系列电影免费观看| 日韩精品欧美精品| 精品免费一区二区| 亚州一区二区三区| 天天综合久久| 久久免费午夜影院| 欧美一区二区大片| 91国内在线视频| 日韩中文字幕在线精品| 91久久国产婷婷一区二区| 国产综合在线看| 亚洲AV无码成人精品一区| 国产网红在线观看| 91超碰在线| 四虎成人av| 国产精品三级视频| 日韩毛片在线看| 精品久久久久久综合日本| 全部孕妇毛片丰满孕妇孕交| 免费在线观看一区| 青青草97国产精品免费观看| 国产精品美女久久久免费 | 青青草久久爱| 久久久亚洲高清| 国产久卡久卡久卡久卡视频精品| 欧美日韩黄色一区二区| 91精品免费视频| 青青九九免费视频在线| 另类的小说在线视频另类成人小视频在线 | 可以在线观看的av| 香蕉视频禁止18|