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

概述

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

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

创建一个表先:

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)

 

添加触发器:

---创建触发器(在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()) 

删除触发器

 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

 

修改触发器

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

 

最后

以上就是会撒娇季节为你收集整理的SQL查询 ——如何使用触发器的全部内容,希望文章能够帮你解决SQL查询 ——如何使用触发器所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部