我是靠谱客的博主 任性金针菇,最近开发中收集的这篇文章主要介绍浅谈——触发器浅谈SqlService系列文章一、触发器是什么?二、触发器能干什么?总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

浅谈SqlService系列文章


文章目录

  • 系列文章目录
  • 一、触发器是什么?
  • 二、触发器能干什么?
  • 三、触发器怎么用?
  • 四、为什么要慎用触发器?
  • 总结

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

一、触发器是什么?

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

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

作用:

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

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

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

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

二、触发器能干什么?

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

三、触发器怎么用?

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

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

        insert 触发器

        delete 触发器

        update 触发器

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

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

存放更新前的记录

     

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

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

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


04、SqlService下触发器的格式                                                                                                         

create trigger 触发器名
on 哪个表
for 那种类型触发器(insert , delete , update )

as
		sql语句
go

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

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

前提代码:

drop database test01;	--删除数据库test01
create database test01;	--创建数据库test01
use test01;	--使用test01数据库

--创建数据表a
create table a(
	id	int ,
	name nvarchar(20),
	age nvarchar(20)
)

--创建数据表b
create table b(
	id	int,
	name nvarchar(20),
	sj	time    --时间
)

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

--题目:a表添加数据时,b表也添加对应的数据

--创建新增类型触发器
create trigger insert_a
on a
for insert    --insert型触发器
as
	declare @id int    --自定义变量 id
			,@name nvarchar(20)    --自定义变量 name
	select @id=id,@name=name from inserted;    --在inserted表里读取 id 和 name
	set @id=@id;    --赋值到变量里
	set @name=@name;    --赋值到变量里
	insert into b values(@id,@name,getdate());    --编写新增b表数据的代码

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

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

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

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


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

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

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

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

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

delete from a where id=1 ;

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



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

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

create trigger update_a	--创建触发器
on a	--在a表变化时
for update	--修改型触发器
as 
	declare @id int	--自定义变量
			,@name nvarchar(20)	--自定义变量

	select @id=id from deleted;	--读取id
	select @name=name from inserted;--读取新的name值
	set @id=@id;	--赋值
	set @name=@name;	--赋值
	update b set name=@name where id=@id ;	--通过id 修改b表的name

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

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

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

下面是修改之前的数据:

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

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

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

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

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



总结

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

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

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

        拜拜了您咧。

最后

以上就是任性金针菇为你收集整理的浅谈——触发器浅谈SqlService系列文章一、触发器是什么?二、触发器能干什么?总结的全部内容,希望文章能够帮你解决浅谈——触发器浅谈SqlService系列文章一、触发器是什么?二、触发器能干什么?总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部