使用触发器在具有外键约束的属性中停止无效数据?

时间:2010-05-13 23:01:31

标签: sql mysql triggers myisam

如何指定一个触发器,它检查数据是否插入表外键属性,实际存在于引用表中。如果存在则不应执行任何操作,否则触发器应删除插入的元组。

例如:考虑有2个表           R(A int主键)和           S(B int Primary Key,A int Foreign Key References R(A))。

我写了一个这样的触发器:

Create Trigger DelS
BEFORE INSERT ON S 
FOR EACH ROW 
BEGIN 
Delete FROM S where New.A <> ( Select * from R;) );
End; 

我确定在触发器的Begin和end Blocks中指定内部子查询时出错了。我的问题是如何制作这样的触发器?

1 个答案:

答案 0 :(得分:0)

外键约束不会更好地达到你想要的效果吗?

ALTER TABLE [dbo].[TABLE2]  WITH CHECK 
ADD  CONSTRAINT [FK_TABLE2_TABLE1] FOREIGN KEY([FK_COLUMN])
REFERENCES [dbo].[TABLE1] ([PK_COLUMN])
GO

这就是外键约束的意图 - 具体来说,不允许插入违反外键关系的记录。

请注意,为了使这个例子更具可读性,我使用了不同的列和表名 - S,A,R和B看起来像一团糟。