在需要实现级联删除的情况下,使用 FOREIGN KEY的ON DELETE CASCADE选项非常方便,但在同一张表中,如果有两个外键引用外表数据,那么最多只能将一个外键设为 ON DELETE CASCADE,其他的引用约束需要使用触发器实现级联删除。
1 --建立单词表 2 IF EXISTS (SELECT * FROM sysobjects WHERE name='Word') 3 DROP TABLE Word 4 CREATE TABLE Word 5 ( 6 wordID int NOT NULL CONSTRAINT PK_Word PRIMARY KEY IDENTITY(1,1), 7 --单词编号 8 word nvarchar(50) NOT NULL CONSTRAINT UQ_Word UNIQUE, 9 --单词 10 ) 11 GO 12 13 --单词关系表 14 IF EXISTS (SELECT * FROM sysobjects WHERE name='WordRelation') 15 DROP TABLE WordRelation 16 CREATE TABLE WordRelation 17 ( 18 relationID int NOT NULL CONSTRAINT PK_WordRelation PRIMARY KEY IDENTITY(1,1), 19 --单词关系记录编号 20 wordSID int NOT NULL CONSTRAINT FK_Word_WordRelation_S FOREIGN KEY REFERENCES Word(wordID) ON DELETE CASCADE, 21 --主单词编号 22 wordOID int NOT NULL CONSTRAINT FK_Word_WordRelation_O FOREIGN KEY REFERENCES Word(wordID) ON DELETE CASCADE, 23 --从单词编号 24 ) 25 GO
报告错误为:
消息 1785,级别 16,状态 0,第 5 行 将 FOREIGN KEY 约束 'FK_Word_WordRelation_O' 引入表 'WordRelation' 可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。 消息 1750,级别 16,状态 0,第 5 行 无法创建约束。请参阅前面的错误消息。