触发器–查询,删除,修改
一、什么是触发器?
触发器(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表:
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表:
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表:
bookType表:
触发器到此为止 OVER!!!
2021-8-2-23:23