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

  • 相关阅读:
    机器学习(八) 多项式回归与模型泛化(上)
    机器学习(七) PCA与梯度上升法 (下)
    机器学习(七) PCA与梯度上升法 (上)
    机器学习(六) 梯度下降法 (下)
    机器学习(六) 梯度下降法 (上)
    机器学习(五) 线性回归法 (下)
    机器学习(五) 线性回归法 (上)
    机器学习(四) 机器学习(四) 分类算法--K近邻算法 KNN (下)
    获取字符串中img标签的url集合(转载)
    微信上传文章素材—ASP.NET MVC从View层传数据到Controller层
  • 原文地址:https://www.cnblogs.com/zhaofei/p/3376594.html
Copyright © 2011-2022 走看看