SQL学习笔记8 ---触发器

 创建触发器

create trigger deleteNewClass //在表NewClass中创建触发器deleteNewClass ,表中有数据删除时执行删除表News中Classid=3的数据
on NewClass
after delete
as
delete News from News,deleted whereNews.Classid=deleted.ID

 

 

Alter trigger newscount
on News
after update
as
begin

  declare @rownum int--存储当前是哪一行
  declare @titalcount int --总共有多少行
  declare @tempid int--保存当前行的newsid
  declare @countnews int
  declare @tab table(indexid int Identity(1,1) not null,newsid int)--定义一个临时表
  insert into @tab select ID from News--把News中的ID插入表中的newsid里
--  select *from @tab
  set @titalcount=@@ROWCOUNT--统计临时表有多少行
  set @rownum=1
  while @rownum<@titalcount--遍历临时表中的数据
     begin
        select @tempid=newsid from @tab where indexid=@rownum--把每一行的indexid赋给变量@tempid
        select  @countnews=COUNT(*) from NewClass where ID=@tempid--NewClassID=@tempid的总共数据
        update NewClass set countnews=@countnews  where ID=@tempid
        set  @rownum+=1
     end
end

 

deleted与inserted数据的差异

   Inserted 存放进行insert和update操作后的数据

   deleted存放进行delete和update操作前的数据

    二者结构与触发器作用的表结构是一样的,只是存放的数据有差异

   update操作相当于先进行delete再进行insert,所以在进行update操作时,修改前的数据拷贝一条道delete表中,修改后的数据存到触发器作用的表中,同时还要拷贝一条到inserted表中

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值