SQLServer FOREIGN KEY ON DELETE CASCADE 限制条件

在需要实现级联删除的情况下,使用 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 行
无法创建约束。请参阅前面的错误消息。

 

转载于:https://www.cnblogs.com/shuijinghuntun/p/4469951.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值