我正在使用SQLce学习数据库。有一些问题,有这个错误:
A foreign key value cannot be inserted because a corresponding primary key value does not exist.
尝试保存没有指定一个外键的数据行时,数据的完整性和接受程度如何工作。是不是可以以某种方式将其设置为NULL,这意味着它不会引用另一个表?万一,我该怎么做? (对于整数键字段)
此外,如果使用与其他表中的现有主键对应的有效外键保存行,该怎么办?但随后决定删除该另一个表中的该条目。因此外键将不再有效。我会被允许删除吗?它是如何工作的?我认为它应该简单地重置为空值..但也许它不是那么简单?
答案 0 :(得分:1)
您需要做的是从父级开始插入数据。
因此,如果您有一个订单表和一个引用订单的商品表,您必须先将所有子订单添加到列表中,然后再创建新订单。
您可以获得许多数据访问库(在C#中有Linq to SQL),它们将尝试解决此问题。
如果您需要删除实际必须采用其他方式的数据,请在删除父订单记录之前删除这些项目。
当然,这假设您正在强制执行外键,可能不会强制执行密钥,这在批量删除期间可能很有用。
答案 1 :(得分:0)
这是因为你在表格中有“坏数据”。检查主表中是否包含所有相应的值。
DBMS检查参照完整性以确保数据库中数据的“正确性”。
例如,如果 TableA 中的列名为 some_id ,值为1到10,而中的列名为 some_id TableB 的值为1到11,然后 TableA 与 TableB 中已有的值没有对应的值(11)。
答案 2 :(得分:0)
您可以将外键设为可空但我不推荐它。可能出现太多问题和不一致。重新设计表,以便您不需要为不存在的值填充外键。通常,您可以通过将列移动到新表来执行此操作。