sql server中的触发器用法实例详解

2024-04-16 0 983
目录
  • 1.触发器的定义
  • 2.触发器的分类
  • 3.dml触发器的工作原理
  • 4.触发器的应用
    • 准备数据
    • 1.insert触发器
    • 2.delete触发器
    • 3.update 触发器
    • 补充:
    • DDL触发器
  • 5.触发器的启用和禁用
    • 总结

      1.触发器的定义

      触发器其实就是一个特殊的存储过程,这个存储过程呢,不能调用罢了, 而是当数据发生变化的时候才触发了这个过程,;

      2.触发器的分类

      1) ,ddl触发器, 针对数据库的更新变化

      主要是以create,drop,alter开头的语句的触发

      2)dml触发器 这个针对表达数据更新

      after |for 触发器(动作完成之后触发)

      insert 触发器:

      delete触发器

      update触发器

      3)登录触发器

      登录触发器将为响应 LOGIN 事件而激发存储过程。与 SQL Server 实例建立用户会话时将引发此事件。登录触发器将在登录的身份验证阶段完成之后且用户会话实际建立之前激发。因此,来自触发器内部且通常将到达用户的所有消息(例如错误消息和来自 PRINT 语句的消息)会传送到 SQL Server 错误日志。如果身份验证失败,将不激发登录触发器。

      3.dml触发器的工作原理

      在dml触发器执行过程中, 会产生两张临时表 inserted and deleted 在执行完毕后自动释放;

      顺序insert触发器delete触发器update触发器1执行insert语句,在表中插入数据执行delete语句,删除数据

      执行update语句

      ,修改数据

      2在临时表inserted中插入新数据的一个副本在deleteed表中插入删除的数据的副本

      a:首先备份要更新的数据,插入到deleted表中

      b:备份完成后,将更新数据插入到inserted 表中

      3

      触发器对数据进行检验, 确定是否会滚或者其他操作触发器对删除数据检查, 来执行其他操作插入新的数据

      4.触发器的应用

      准备数据

      工欲善其事,必先利其器,(准备数据):

      create table book (
      bid int primary key not null ,
      bname varchar(200) not null ,
      bauther varchar(100) ,
      bprice decimal(10,2)
      )

      insert into book(bid,bname,bprice,bauther)
      values (1,\’论语\’ ,25.6 ,\’孔子\’),
      (2,\’天龙八部\’,25.6 ,\’金庸\’) ,
      (3,\’雪山飞狐\’,32.7 ,\’金庸\’),
      (4,\’平凡的世\’,35.8 ,\’路遥\’ ) ,
      (5,\’史记\’ ,54.8 ,\’司马迁\’) ,
      (6,\’狂人日记\’,35.5 ,\’鲁迅\’)

      创建触发器的格式:

      CREATE TRIGGER trigger_name
      ON table_name
      [WITH ENCRYPTION] –给触发器文本加密
      FOR|after |instead of [DELETE, INSERT, UPDATE] —多加一句after和for 是一个功能, 用一个就好了
      AS
      T-SQL语句
      GO

      [WITH ENCRYPTION] –给触发器文本加密

      for 和after — 其实就是同一个功能,

      instead of 就是执行某个操作之前

      1.insert触发器

      创建触发器

      –判断数据库中,是否存在这个触发器
      IF (object_id(\’tr_insert_book\’,\’tr\’) is not null)
      drop trigger tr_insert_book
      go
      create trigger tr_insert_book
      on book
      instead of insert
      as
      begin
      declare @bid int ;
      select @bid = bid from inserted ;
      insert into books(bid) values(@bid);
      print\’插入成功\’;
      end

      测试:

      insert into book values(8,\’鹿鼎记\’,\’金庸\’,60)

      结果:

      sql server中的触发器用法实例详解

      2.delete触发器

      创建触发器:

      IF(OBJECT_ID(\’TR_DELETE_BOOK\’,\’TR\’) IS NOT NULL )
      DROP TRIGGER TR_DELETE_BOOK
      GO

      CREATE trigger TR_DELETE_BOOK
      ON BOOK
      FOR DELETE
      AS
      BEGIN

      print\’数据备份\’;

      if(object_id(\’book_back\’,\’U\’) is not null )
      insert into book_back select * from deleted;
      else
      select * into book_back from deleted;
      print \’备份完成\’
      end;

      测试:

      delete from book where bid =1
      select * from book_back

      sql server中的触发器用法实例详解

      少了bid=1 的数据

      sql server中的触发器用法实例详解

      book_back成功备份;

      3.update 触发器

      创建触发器

      IF(OBJECT_ID(\’TR_UPDATE_BOOK\’,\’TR\’) IS NOT NULL )
      DROP TRIGGER TR_UPDATE_BOOK
      GO

      CREATE TRIGGER TR_UPDATE_BOOK
      ON BOOK
      AFTER UPDATE
      AS
      BEGIN
      waitfor delay \’00:00:02\’
      select * from book;
      END

      测试

      update book set bname =\’金瓶梅\’ ,bauter=\’未知\’,bprice =12345 where bid =8

      结果:

      sql server中的触发器用法实例详解

      补充:

      update列级更新

      需求,比如book的bid是主键 ,那就不能更改, 我们应该这么办呢?

      别急,我们可以用update()函数

      IF(OBJECT_ID(\’TR_UPDATE1_BOOK\’,\’TR\’) IS NOT NULL )
      DROP TRIGGER TR_UPDATE1_BOOK
      GO

      create trigger TR_UPDATE1_BOOK
      on book
      instead of update
      as
      begin
      if(update(bid))
      begin
      print\’主键不能更改!!!!\’;
      rollback;
      end
      end

      测试:

      update book set bid =1
      select * from book

      sql server中的触发器用法实例详解

      sql server中的触发器用法实例详解

      DDL触发器

      创建触发器

      IF(OBJECT_ID(\’TR_drop_BOOK\’,\’TR\’) IS NOT NULL )
      DROP TRIGGER TR_drop_BOOK
      GO
      create trigger TR_drop_BOOK
      on database
      instead of DROP_TABLE,ALTER_TABLE
      as
      begin
      print\’别想着干坏事!!!!好好工作\’
      rollback;
      end

      测试

      drop table book

      结果

      sql server中的触发器用法实例详解

      5.触发器的启用和禁用

      dml触发器:

      enable |disable trigger triger_name on table_name ;

      ddl触发器:

      enable | disable triggertriger_name on database;

      总结

      到此这篇关于sql server中的触发器用法的文章就介绍到这了,更多相关sql server触发器内容请搜索悠久资源以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源!

      您可能感兴趣的文章:

      • SQLServer触发器创建、删除、修改、查看示例代码
      • sqlserver 触发器教程
      • sqlserver 触发器实例代码
      • Sql Server触发器的使用
      • SQL SERVER 触发器介绍
      • SqlServer触发器详解
      • SQL Server 触发器实例详解
      • SQL Server:触发器实例详解
      • SQL SERVER触发器详解

      收藏 (0) 打赏

      感谢您的支持,我会继续努力的!

      打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
      点赞 (0)

      悠久资源 MsSql sql server中的触发器用法实例详解 https://www.u-9.cn/database/mssql/185350.html

      常见问题

      相关文章

      发表评论
      暂无评论
      官方客服团队

      为您解决烦忧 - 24小时在线 专业服务