表与表直接由于存在外键约束而导致删除操作失败

如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的。

在我的数据中,有两张表,一张是light,一张是collector.

下图是light表,里面的字段collectorid是表collector的主键,对于light表来说,collectorid是它的外键:

image

下图是collector表,collectorid是这个表的主键,

image

在Microsoft SQL Server Management Studio中,建立一个外键的步骤如下图所示:

在需要建立外键的表上(light)上,右键->选择新建外键:

image

选择表和列规范:

image

选择主键表为collector,外键表为light(为什么light是外键表呢??因为对light来说,collecrorid是它的外键)。

image

选择删除规则为级联(casecade),如果不选择级联会出现什么问题呢?考虑下面的场景,现在需要删除collector中某些数据,但是由于collectorid是light表的外键,也就是light还在引用要删除数据的collectorid,这样就会出现删除失败的情况,为了避免这种情况出现,我们就要选择外键的删除规则为级联(cascade)方式,这样在删除collector表中的数据时,所以引用colletorid的light中的数据就会被自动的删除。

image

在我的项目中出现的问题如下图所示:

image

上面页面显示的数据就是来自于collector,由于当时light选择了collector的collectorid作为它的外键,但是有没有在建立light外键的时候选择级联方式,所以就出现了删除失败的情况。

https://www.cnblogs.com/justinzhang/archive/2011/07/26/2117343.html

猜你喜欢

转载自blog.csdn.net/liuchaoxuan/article/details/80934215