主表A与丛表B有外键约束,如何写一个触发器在删除主表的记录同时删除从表的对应的记录?

解决方案 »

  1.   

    级联引用完整性约束
    当用户试图删除或更新外键所指向的键时,级联引用完整性约束使您得以定义 Microsoft® SQL Server™ 2000 所采取的操作。CREATE TABLE 和 ALTER TABLE 语句的 REFERENCES 子句支持 ON DELETE 和 ON UPDATE 子句: [ ON DELETE { CASCADE | NO ACTION } ]
    [ ON UPDATE { CASCADE | NO ACTION } ] 
    如果没有指定 ON DELETE 或 ON UPDATE,则默认为 NO ACTION。NO ACTION 指定的行为与 SQL Server 的早期版本中发生的行为相同。ON DELETE NO ACTION指定如果试图删除某行,而该行含有由其它表的现有行中的外键所引用的键,则产生错误并回滚 DELETE。ON UPDATE NO ACTION指定如果试图更新某行中的键值,而该行含有由其它表的现有行中的外键所引用的键,则产生错误并回滚 UPDATE。CASCADE 允许在表间级联键值的删除或更新操作,这些表的外键关系可追溯到执行修改的表。不能为任何具有 timestamp 列的外键和主键指定 CASCADE。ON DELETE CASCADE指定如果试图删除某行,而该行含有由其它表的现有行中的外键所引用的键,则也将删除所有包含那些外键的行。如果在目标表上也定义了级联引用操作,则对从那些表中删除的行同样采取指定的级联操作。ON UPDATE CASCADE指定如果试图更新某行中的键值,而该行的键值由其它表的现有行中的外键所引用,则所有外键值也将更新成为该键指定的新值。如果在目标表上也定义了级联引用操作,则对在那些表中更新的键值同样采取指定的级联操作。级联引用操作的示例可以基于 Northwind 中 Products 表上的 FK_Products_Suppliers 约束。该约束建立了从 Products 表中的 SupplierID 列到 Suppliers 表中的 SupplierID 主键列的外键关系。如果为约束指定了 ON DELETE CASCADE,则删除 SupplierID = 1 的 Suppliers 表中的行时也将删除 SupplierID = 1 的 Products 表中的三行。如果为该约束指定了 ON UPDATE CASCADE,则更新 Suppliers 表中从 1 到 55 的 SupplierID 值也将更新 Products 表中 SupplierID 值当前等于 1 的三行的 SupplierID 值。不能为具有 INSTEAD OF 触发器的表指定级联操作。为表定义级联操作后,就不能向该表添加 INSTEAD OF 触发器。
      

  2.   

    alter table tb_A
     add constraint fk_id foreign key(id) references tb_B(id) on delete cascade