如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的。
在我的数据中,有两张表,一张是light,一张是collector.
下图是light表,里面的字段collectorid是表collector的主键,对于light表来说,collectorid是它的外键:
下图是collector表,collectorid是这个表的主键,
在Microsoft SQL Server Management Studio中,建立一个外键的步骤如下图所示:
在需要建立外键的表上(light)上,右键->选择新建外键:
选择表和列规范:
选择主键表为collector,外键表为light(为什么light是外键表呢??因为对light来说,collecrorid是它的外键)。
选择删除规则为级联(casecade),如果不选择级联会出现什么问题呢?考虑下面的场景,现在需要删除collector中某些数据,但是由于collectorid是light表的外键,也就是light还在引用要删除数据的collectorid,这样就会出现删除失败的情况,为了避免这种情况出现,我们就要选择外键的删除规则为级联(cascade)方式,这样在删除collector表中的数据时,所以引用colletorid的light中的数据就会被自动的删除。
在我的项目中出现的问题如下图所示:
上面页面显示的数据就是来自于collector,由于当时light选择了collector的collectorid作为它的外键,但是有没有在建立light外键的时候选择级联方式,所以就出现了删除失败的情况。