加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

超具体的SqlServer数据库触发器总结

发布时间:2019-10-22 15:33:12 所属栏目:编程 来源:波波说运维
导读:【大咖·来了 第7期】10月24日晚8点寓目《智能导购对话呆板人实践》 触发器(trigger)是SQL server 提供应措施员和数据说明员来担保数据完备性的一种要领,它是与表变乱相干的非凡的存储进程,它的执行不是由措施挪用,也不是手工启动,而是由变乱来触发,当
副问题[/!--empirenews.page--] 【大咖·来了 第7期】10月24日晚8点寓目《智能导购对话呆板人实践》

触发器(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 [DELETE, INSERT, UPDATE] 
  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触发器

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读