当前位置:   article > 正文

浅谈——触发器

浅谈——触发器

浅谈SqlService系列文章


文章目录


提示:以下是本篇文章正文内容,下面案例可供参考

一、触发器是什么?

        触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发。

        简单来说:好比游戏里的隐藏成就,当你达到或者完成了一定的条件,自动触发的东西。

作用:

  • 可在写入数据表前,强制检验或转换数据。

  • 触发器发生错误时,异动的结果会被撤销。

  • 部分数据库管理系统可以针对数据定义语言(DDL)使用触发器,称为DDL触发器。

  • 可依照特定的情况,替换异动的指令 (INSTEAD OF)。

二、触发器能干什么?

        根据触发条件增删改数据库中的数据,因此,它其中的一个功能就是可用来判断,输入内容是否合法。

三、触发器怎么用?

      01、  在说怎么用之前,先介绍下DML触发器的分类

它包括了下面三个类型的触发器:

        insert 触发器

        delete 触发器

        update 触发器

下方我列了一个表,能更直观的看出来

inserted  逻辑表deleted 逻辑表
增加记录(insert)存放添加记录
删除记录(delete)存放被删除的记录
修改记录(update)存放更新后的记录

存放更新前的记录

     

        02、触发器有两个特殊的表:插入表(inserted 表)和 删除表(delete 表)

这两个表是逻辑表,也是虚表,不会存储在数据库中,而且这两张表都是只读的。

03、当然了,如果上面所写的两个点  都不懂  的话,没关系,有个概念就行了,下面附上代码后你会更直观的理解


04、SqlService下触发器的格式                                                                                                         

  1. create trigger 触发器名
  2. on 哪个表
  3. for 那种类型触发器(insert , delete , update )
  4. as
  5. sql语句
  6. go

05、老规矩,理论看的再多也不如实践影响深,小练习搞上。

小练习1:a表添加数据时,b表也添加对应的数据

前提代码:

  1. drop database test01; --删除数据库test01
  2. create database test01; --创建数据库test01
  3. use test01; --使用test01数据库
  4. --创建数据表a
  5. create table a(
  6. id int ,
  7. name nvarchar(20),
  8. age nvarchar(20)
  9. )
  10. --创建数据表b
  11. create table b(
  12. id int,
  13. name nvarchar(20),
  14. sj time --时间
  15. )

思路:从逻辑表(inserted)里读取到所需要的数据(id,name),再赋值到自定义的变量里,续而通过自定义的变量编写所需要的代码。

  1. --题目:a表添加数据时,b表也添加对应的数据
  2. --创建新增类型触发器
  3. create trigger insert_a
  4. on a
  5. for insert --insert型触发器
  6. as
  7. declare @id int --自定义变量 id
  8. ,@name nvarchar(20) --自定义变量 name
  9. select @id=id,@name=name from inserted; --在inserted表里读取 id 和 name
  10. set @id=@id; --赋值到变量里
  11. set @name=@name; --赋值到变量里
  12. insert into b values(@id,@name,getdate()); --编写新增b表数据的代码

添加型触发器创建后,进行测试:a表添加一条数据,b表触发触发器,自动生成对应的数据

insert into a values(1,'花木兰','女');

查看两个表,这时发现触发了触发器

添加型的触发器就是这么简单!


小练习02:删除a 表的数据时,b表对应的数据同时删除。

思路:读取到a表的id 和 name ,再通过读取到的id 和 name 删除 b表中对应的数据

  1. --a表删除数据时,b表也删除对应的数据
  2. create trigger delete_a --创建触发器
  3. on a --a表在进行操作时
  4. for delete --删除型触发器
  5. as
  6. declare @id int --自定义变量id
  7. ,@name nvarchar(20) --自定义变量name
  8. select @id=id,@name=name from deleted ;--获取 id 和 name 的值
  9. set @id=@id;
  10. set @name=@name;
  11. delete from b where id=@id and name=@name --通过id和name删除b表对应数据
  12. ;

创建完触发器之后查看触发之前,两个表的数据

操作:删除a表时,b表对应的数据也删除

delete from a where id=1 ;

 这时候我们再次查看两个表的数据时,发现b表的数据也删除了,说明删除型触发器触发成功



接下来就到最难理解的修改类型触发器了

老规矩:理论讲的在多,也不如代码来得影响深刻

  1. create trigger update_a --创建触发器
  2. on a --在a表变化时
  3. for update --修改型触发器
  4. as
  5. declare @id int --自定义变量
  6. ,@name nvarchar(20) --自定义变量
  7. select @id=id from deleted; --读取id
  8. select @name=name from inserted;--读取新的name值
  9. set @id=@id; --赋值
  10. set @name=@name; --赋值
  11. update b set name=@name where id=@id ; --通过id 修改b表的name

修改类型的触发器编写完成了,在测试这个触发器之前,我们添加几条数据,用于触发。

  1. insert into a values(1,'花木兰','女');
  2. insert into a values(2,'李白','男');

        好了,数据准备完毕后,就可以修改a表的数据,然后查看b表里对应的数据是否也是修改了,如果说也修改了,那么说明修改类型的触发器触发成功

下面是修改之前的数据:

把a表里id为1的name修改成其他数据

update a set name='虞姬' where id=1;

这时候我们发现b表的数据同时也修改了,这说明修改类型的触发器成功触发了。

四、为什么要慎用触发器?

        触发器本身没有过错,但由于我们的滥用,势必影响数据库的结构,同时增加了维护的复杂程度。



总结

        这篇文章是我写给那些第一次接触触发器和还未理解出发的人的,写的很浅显,理论也很少,代码里的案例用的也是最为简单和直观的。

        希望对给位初次接触触发器的有个整体的概念,触发器是什么,能干什么,怎么写。这些最基本的触发器操作理解并读懂后,才能在以后编写出更高级的代码。

        好了,今天就写到这里吧,如果这篇文章对你有帮助的话可以点个赞啥的,如果有兴趣的话,可以关注我,后续不定时接着讲解数据库方面的知识。

        拜拜了您咧。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/601945
推荐阅读
相关标签
  

闽ICP备14008679号