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 行
无法创建约束。请参阅前面的错误消息。
时间: 2024-11-08 12:59:54

SQLServer FOREIGN KEY ON DELETE CASCADE 限制条件的相关文章

【MySQL】FOREIGN KEY

1 1 FOREIGN KEY reference PRIMARY KEY CREATE TABLE `roottb` ( `id` INT(11) UNSIGNED AUTO_INCREMENT NOT NULL, `data` VARCHAR(100) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE =InnoDB; CREATE TABLE `subtb` ( `id` INT(11) UNSIGNED AUTO_INCREMENT NOT

Oracle之外键(Foreign Key)用法详解(二)- 级联删除(DELETE CASCADE)

Oracle外键(Foreign Key)之级联删除(DELETE CASCADE) 目标 示例讲解如何在Oracle外键中使用级联删除 什么是级联删除(DELETE CASCADE)? 级联删除是指当主表(parent table)中的一条记录被删除,子表中关联的记录也相应的自动删除. 外键的级联删除可以在创建表时定义,也可以使用ALTER TABLE语法定义. 创建表时定义级联删除 语法: CREATE TABLE table_name ( column1 datatype null/not

MySQL主从复制中断,报“Error on master: message (format)='Cannot delete or update a parent row: a foreign key constraint fails' error code=1217” 错误

前几天,发现从库挂了,具体报错信息如下: 分析思路 1. 因为我采用的是选择性复制,只针对以下几个库进行复制: card,upay,deal,monitor,collect.所以,不太可能出现对于sas_basic的操作能复制到该从库上. 2. 整个架构是1主2从,且都是选择性复制,上面这个从库是直接复制card,upay,deal,monitor,collect这几个数据库的数据,而另外一个从库则是忽略上述库,如下所示: 怀疑是在上述schema下,执行了DROP TABLE IF EXIST

ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

MySQL在删除一张表时出现 可能是MySQL在InnoDB中设置了foreign key关联,造成无法更新或删除数据.可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况. SET FOREIGN_KEY_CHECKS = 0; 然后就可以删除表了. 删除完成后设置 SET FOREIGN_KEY_CHECKS = 1; drop table slow_log cascade; ERROR 1580 (HY000) at line 1: You cannot 'DROP' a l

MySQL:ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

MySQL在删除一张表时出现 ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails 可能是MySQL在InnoDB中设置了foreign key关联,造成无法更新或删除数据.可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况. SET FOREIGN_KEY_CHECKS = 0; 然后就可以删除表了. 删除完成后设置 SET FOREIGN_KEY_CHE

【转】 #1451 - Cannot delete or update a parent row: a foreign key constraint fails 问题的解决办法

转载地址:http://blog.csdn.net/donglynn/article/details/17056099 错误 SQL 查询: DELETE FROM `zmax_lang` WHERE CONVERT( `zmax_lang`.`lang` USING utf8 ) = 'fr' LIMIT 1 MySQL 返回: #1451 - Cannot delete or update a parent row: a foreign key constraint fails (`myre

关于mysql中[Err] 1451 -Cannot delete or update a parent row: a foreign key constraint fails

今天在弄mysql的时候突然出现一条这个错误信息,当时就蒙逼了,不过仔细观察一番后发现是外键的原因,这是由于在删除表的时候存在外键关联这时候就会出现删除错误,我们可以暂时把mysq数据库的外键约束给关闭掉,具体方法请看如下: [Err] 1451 -Cannot delete or update a parent row: a foreign key constraint fails SET FOREIGN_KEY_CHECKS = 0 //关闭外键约束 进行完操作后别忘记了再把外键约束重新打开

mysql ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constrain fails

ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constrain fails. 可能是MySQL在InnoDB中设置了foreign key关联,造成无法更新或删除数据.可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况. 1.set foreign_key_checks=0; 2.删除要删除的表; 3.set foreign_key_checks=1; 原文地址:https://w

Mysql之1451 - Cannot delete or update a parent row: a foreign key constraint fails...解决办法记录

今天使用delete语句删除一张表中的一条信息时,提示了这么一个错误:1451 - Cannot delete or update a parent row: a foreign key constraint fails...错误代码为1451 在这里参考了一位园友的解决方案mysql删除外链解决办法,如下: 关闭外键约束 SET FOREIGN_KEY_CHECKS=0; 语句执行 DELETE FROM blog_blog WHERE blog_blog.id=91; 删除完成后,重新开启外