2021-08-02

本文介绍SQL Server触发器的概念与作用,演示如何通过触发器在修改book表时自动更新bookType表中的统计数据,包括新增、删除及修改操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

触发器–查询,删除,修改

一、什么是触发器?
触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发。
二、触发器的作用:
1.可在写入数据表前,强制检验或转换数据。
2.触发器发生错误时,异动的结果会被撤销。
3.部分数据库管理系统可以针对数据定义语言(DDL)使用触发器,称为DDL触发器。
4.可依照特定的情况,替换异动的指令 (INSTEAD OF)。
三、运行环境:
windows
四、SQL版本:
SQL server 2018
五、创建触发器:

create trigger 触发器名称
	on 表名
	after 操作 --在什么操作之后执行触发器
	as
	begin
		执行语句
end

例:创建一个book表和一个bookType表,在book表中修改数据,对应的bookType表中的bookNum自动修改。
1.创建book表:
书号,书名,书的类型编号
2.创建bookType表:
类型号,书的类型名称,此类型书的数量
3.插入触发器(insert):
3.1实现代码:

create trigger book_xinzeng--  创建名为 book_xinzeng 的触发器
	on book --在表 book 上
	after insert --在插入之后执行
	as
	begin
		declare @bookTypeId int --创建变量 @bookTypeId
		select @bookTypeId=booktypeid from book 
		--在表 book 中找到类型编号 booktypeid 存在 @bookTypeId 中
		update bookType set booknum=booknum+1 where id = @bookTypeId
		--更新表 bookType,当 bookType 表中的 id = @bookTypeId时,执行 booknum=booknum+1 
end

3.2插入数据:

insert into book (bookid,bookname,booktypeid) values ('1005','红楼梦','4')

3.3执行效果:
book表:
插入数据之后的book表
bookType表:
插入数据之后的bookType表
4.删除触发器(delete):
4.1实现代码:

create trigger book_shanchu --创建名为 book_shanchu 的触发器
on book --在表 book 上
after delete --在删除之后执行
as
begin
	
	declare @bookTypeId int --创建变量 @bookTypeId
	select @bookTypeId = booktypeid from book 
	--在表 book 中找到类型编号 booktypeid 存在 @bookTypeId 中
	update bookType set bookNum=bookNum-1 where @bookTypeId=id
	--更新表 bookType,当 bookType 表中的 id = @bookTypeId时,执行 booknum=booknum-1 
end

4.2删除数据:

delete from book where bookid=1006

4.3执行效果:
book表:
删除数据之后的book表
bookType表:
删除数据之后的bookType表
5.修改触发器(update):
5.1实现代码:

create trigger book_xiugai --创建名为 book_xiugai 的触发器
on book --在表 book 上
after update --在修改之后执行
as
begin

	declare @B_bookTypeId int --创建变量 @B_bookTypeId (修改之前的类型号)
	declare @L_bookTypeId int --创建变量 @L_bookTypeId (修改之后的类型号)

	select @B_bookTypeId=booktypeid from deleted --在删除的表中找到类型编号 booktypeid 存在 @bookTypeId 中
	select @L_bookTypeId=booktypeid from inserted----在修改的表中找到类型编号 booktypeid 存在 @bookTypeId 中

	update bookType set bookNum=bookNum-1 where id=@B_bookTypeId
	--更新表 bookType,当 bookType 表中的 id = @bookTypeId时,执行 booknum=booknum-1 
	update bookType set bookNum=bookNum+1 where id=@L_bookTypeId
	--更新表 bookType,当 bookType 表中的 id = @bookTypeId时,执行 booknum=booknum+1 

end

5.2修改数据:

update book set bookid='1005',bookname='三国演义',booktypeid='4' where bookid='1005'

5.3执行结果:
book表:
修改之后的book表
bookType表:
修改之后的bookType表
触发器到此为止 OVER!!!

2021-8-2-23:23

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值