zoukankan      html  css  js  c++  java
  • 用触发器进行级联删除

    原文:http://blog.csdn.net/lixueru0819/article/details/6841572

    这次遇到的问题是表的级联删除,当删除一个主键信息时会出错,因为还有外键信息,要想全部删除就用到了触发器。

    1. <span style="font-family:Microsoft YaHei;font-size:16px;color:#6600cc;">CREATE TRIGGER trigCategoryDelete (创建触发器)  
    2.    ON  Category (在哪个表上创建)  
    3.    after DELETE  (引发触发器的事件)  
    4. AS   
    5. BEGIN  
    6.     delete news where caID=(select id from deleted)(触发器引发后的一些处理语句)  
    7. END  
    8. </span>  


    但是after是在delete发生之后的,所以这样还是会报错。删除操作都已经结束了还怎么删除外键呢。

    instead of 代替删除语句:

    1. <span style="font-family:Microsoft YaHei;font-size:16px;color:#6600cc;">ALTER TRIGGER [dbo].[trigCategoryDelete]   
    2.    ON  [dbo].[category]   
    3.    instead of  DELETE  
    4. AS   
    5. BEGIN  
    6.     declare @id int  
    7.     select @id=id from deleted   
    8.     --删除新闻  
    9.     delete news where caId=@id  
    10.     --删除新闻类别  
    11.     delete category where id=@id   
    12. END</span>  

    这样就能删除外键里的信息了。

    如果是三个表的级联删除

    1. <span style="font-family:Microsoft YaHei;font-size:16px;color:#6600cc;">ALTER TRIGGER [dbo].[trigCategoryDelete]   
    2.    ON  [dbo].[category]   
    3.    instead of  DELETE  
    4. AS   
    5. BEGIN  
    6.     declare @caId int  
    7.     select @caId=id from deleted   
    8.     --删除评论  
    9.     delete comment where newsId = (select id from news where caId=@caId)  
    10.     --删除新闻  
    11.     delete news where caId=@caId  
    12.     --删除新闻类别  
    13.     delete category where id=@caId   
    14. END</span>  


     

    但是这样的话会报错,错就错在一条新闻下对应着多条评论,解决办法就是把“=”改为“in”,这样所有查处的评论都可以删除了

    ps:至于前面出发器的名称和表的名称不太一样,相信大部分人都知道,当保存触发器后,再打开的时候就会自动补全表信息。

  • 相关阅读:
    Sgu294He's Circles
    [HNOI2008]Card洗牌
    传球游戏
    [BZOJ1478]Sgu282 Isomorphism
    [POJ2154]Color
    [ZOJ1961]Let it Bead
    BZOJ1257 [CQOI2007]余数之和sum
    BZOJ1192 [HNOI2006]鬼谷子的钱袋
    BZOJ4614 [Wf2016]Oil
    BZOJ3209 花神的数论题
  • 原文地址:https://www.cnblogs.com/zhaofei/p/3376594.html
Copyright © 2011-2022 走看看