网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计资源 > 数据库 > 正文

(SQL)利用触发器删除级联记录的方法

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

SQL触发器:当改变(增、删、改)数据表的记录时,绑定在SQL语句(增、删、改)中的触发器能够触发某些事件或者函数,所以我们可以在触发器中编写一些处理语句。
比如,当我们删除新闻类别的时候,由于外键的原因,我们无法删除新闻类别下有新闻内容的记录,但是通过触发器,我们就可以实现。

  1. delete from category where id=5  --sql删除语句 
  2. create trigger trigcategorydelete  --当执行sql删除语句时,执行触发器 
  3. on category 
  4. after delete 
  5. as 
  6. begin 
  7. delete news where caId=(select id from deleted) --删除对应新闻类别的新闻内容 
  8. end 

照一般的思维,这样就可以同时删除新闻类别和其下的新闻内容,但是这样执行却不成功。是因为关键字AFTER,AFTER表示在执行SQL删除语句后,再执行触发器里的语句。这样一来,顺序同样是先删除新闻再删除新闻内容,肯定不成功。
改变关键字after为instead of
instead of,表示代替delete操作,而没有真正delete from category where id=5,当category表的删除时,同时触发了trigcategorydelete触发器,但是由于有instead of关键字,所以本身并不执行删除操作,而是执行触发器里的sql语句,从而可以替代之前的SQL语句。比如:

  1. create trigger trigcategorydelete 
  2. on category 
  3. instead of delete 
  4. as 
  5. begin 
  6. declare @id int  --定义一个变量id 
  7. select @id=id from deleted  --从deleted临时表中,赋值id给变量@id 
  8. delete news where caId=@id  --先删除该类别下的所有新闻 
  9. delete category where id=@id  --然后删除新闻类别  
  10. end 

当我们执行 delete from category where id=5时,id=5的类别并没有真正删除,而是转而执行触发器里面的SQL语句
关于deleted表:
Deleted表用于存储 DELETE 和 UPDATE 语句所影响的行的复本。在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除,并传输到deleted表中。Deleted表和触发器表通常没有相同的行。(//最后一句不是怎么明白啊?) by google
删除一条记录时候,他会把删除的这条记录放在一张临时表里,当你对category表进行删除时,在SQL返回的结果消息里面会提示出你删除的记录。

  • 下一篇资讯: SQL2005表结构信息查询
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师