我是靠谱客的博主 会撒娇季节,这篇文章主要介绍SQL查询 ——如何使用触发器,现在分享给大家,希望可以做个参考。

 简单来说:一个能够自动执行事务的存储过程

弊端:如果在程序中也写了增删改则会 改变程序的输出结果

创建一个表先:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
create table good ( id int primary key identity (1,1), gid int unique not null, goodName varchar(200) not null, number int check (number>=0) ) create table sale ( gid int references good(gid), number int check (number>=0), time datetime default(getdate()) ) insert into good values(1,'联想小新潮-Pro13',100) insert into good values(2,'华为P40 ',999) insert into good values(3,'苹果P12 ',666)

 

添加触发器:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
---创建触发器(在sale表中number+1,good表中 number-1) go create trigger salegood ---在sale表上创建触发器 当sale 插入数据时触发触发器 ----on 代表监听那张表 ----for 表示监听哪一个动作 on sale for insert as ---声明变量@gid,@number declare @gid int,@number int ----在instered新数据临时表中查询出来添加的gid,number///delted 表是删除之前的 select @gid=gid,@number=number from inserted ---根据要跟新的gid 更新触发器所要触发的表的所对应列 update good set number=number-@number where gid=@gid go insert into sale values(1,2,GETDATE()) insert into sale values(2,2,GETDATE()) insert into sale values(3,300,GETDATE())

删除触发器

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
go create trigger updategood ---监听主表 物品先卖出产生消费记录导致仓库减少 on sale for update as --- 声明变量1为变化后的参数 declare @gid int,@number int select @gid=gid,@number=number from inserted --- 声明变量1为变化后的参数 deleted 表更新之前的旧数据 declare @gid2 int,@number2 int select @gid2=gid,@number2=gid from deleted ---更新商品表number的值=原有值-(变化后得参数@number2-@修改前的参数@number) update good set number=number-(@number-@number2) where gid=@gid go update sale set number=300 where gid=2

 

修改触发器

复制代码
1
2
3
4
5
6
7
8
9
---删除触发器(如果是重要的数据不能进行删除,则进行数据回滚) go create trigger deletegood ---监听主表 物品先卖出产生消费记录导致仓库减少 on sale for delete as rollback tran go delete from sale where gid=1

 

最后

以上就是会撒娇季节最近收集整理的关于SQL查询 ——如何使用触发器的全部内容,更多相关SQL查询内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部