数据库表id-key Null值和参照完整性

时间:2010-12-25 19:32:04

标签: sql database foreign-keys primary-key

我正在使用SQLce学习数据库。有一些问题,有这个错误:

A foreign key value cannot be inserted because a corresponding primary key value does not exist. 

尝试保存没有指定一个外键的数据行时,数据的完整性和接受程度如何工作。是不是可以以某种方式将其设置为NULL,这意味着它不会引用另一个表?万一,我该怎么做? (对于整数键字段)

此外,如果使用与其他表中的现有主键对应的有效外键保存行,该怎么办?但随后决定删除该另一个表中的该条目。因此外键将不再有效。我会被允许删除吗?它是如何工作的?我认为它应该简单地重置为空值..但也许它不是那么简单?

3 个答案:

答案 0 :(得分:1)

您需要做的是从父级开始插入数据。

因此,如果您有一个订单表和一个引用订单的商品表,您必须先将所有子订单添加到列表中,然后再创建新订单。

您可以获得许多数据访问库(在C#中有Linq to SQL),它们将尝试解决此问题。

如果您需要删除实际必须采用其他方式的数据,请在删除父订单记录之前删除这些项目。

当然,这假设您正在强制执行外键,可能不会强制执行密钥,这在批量删除期间可能很有用。

答案 1 :(得分:0)

这是因为你在表格中有“坏数据”。检查主表中是否包含所有相应的值。

DBMS检查参照完整性以确保数据库中数据的“正确性”。

例如,如果 TableA 中的列名为 some_id ,值为1到10,而中的列名为 some_id TableB 的值为1到11,然后 TableA TableB 中已有的值没有对应的值(11)。

答案 2 :(得分:0)

您可以将外键设为可空但我不推荐它。可能出现太多问题和不一致。重新设计表,以便您不需要为不存在的值填充外键。通常,您可以通过将列移动到新表来执行此操作。