级联删除


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

通过触发器来级联删除:

具体的触发器代码如下:

Create TRIGGER [dbo].[DeleteRelatedProducts] ON  [dbo].[ProductCategory]
 AFTER DELETE
AS 
BEGIN
    SET NOCOUNT ON;
    delete from [dbo].[product] where categoryId in 
    (
        select id from deleted
    )
END

这种方式比较简单,而且语法也很明了:

具体资料可以参照:http://msdn.microsoft.com/en-us/library/ms191300(SQL.105).aspx

 

还有一种方式可能并不是很多人知道:

外键的级联删除和更新:

在sql server 中可以通过设置外键的级联删除和更新来实现这个功能。

这里是外键的定义:来自http://baike.baidu.com/view/68073.htm

简介

外键(Foreign Key)

如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。换而言之,如果关系模式R中的某属性集不是R的主键,而是另一个关系R1的主键则该属性集是关系模式R的外键,通常在数据库设计中缩写为FK。

外键的作用

保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值或使用空值

 

我们现在的要求是删除ProductCategory的时候,同时删除该ProductCategory下面的Product

所以应该在Product 表中建立外键约束,

41CAF4CCE0594D539B8FE9DFF831BC31

 

看到删除规则了吗,指定为层叠的话,那么当删除ProductCategory的时候,就会删除Product了。


select * from ProductCategory;
select * from product;

Delete from ProductCategory;

select * from ProductCategory;
select * from product;

结果如下:

8DD435ED59A34A0EB60B4D7AC9A81A07

引自:关于数据的级联删除和更新