【问题标题】:SQL Server 2008 - Cannot insert due to 'conflict with the FK constraint'SQL Server 2008 - 由于“与 FK 约束冲突”而无法插入
【发布时间】:2012-06-10 22:00:04
【问题描述】:

我的查询如下:

insert into Orders
values
('20012', /*order num, pk*/
'6-10-2012', /*date, i wrote it in a different format, is that okay ?*/
'1000000012'/*customer id, fk*/
)

错误:

The INSERT statement conflicted with the FOREIGN KEY constraint  
"FK_Orders_Customers".   
The conflict occurred in database "MyDB", table "dbo.Customers", column 'cust_id'.
The statement has been terminated.

为什么会出现这个错误?我怎样才能在这个表中插入一些虚拟值?

【问题讨论】:

  • 你确定 1000000012 存在并且它是 TEXT 吗?
  • @xQbert - 我想你的意思是一个字符串而不是TEXT(这是一个不推荐使用的大对象数据类型的名称)。尽管如果列实际上是数字,则不需要引号/不应该存在引号,但 SQL Server 无论如何都会隐式转换 1000000012

标签: sql-server foreign-keys conflict insert-into


【解决方案1】:

您收到错误是因为“客户 ID”列中客户 ID 为 1000000012 的“客户”表中没有记录。首先将该记录插入“客户”表中,您应该没问题。

【讨论】:

  • 知道了。因此,在您可以将某些内容插入订单表之前,数据库会检查客户是否存在。你能告诉我这是如何实现的吗?我是新手,正在尝试参加 SQL 速成课程。
  • 基本上,外键是一个表中的列,它引用另一个表中的列。因此,您插入标记为外键的列中的数据必须存在于被引用的列中。稍后您可能还会在删除时碰到它。假设您想稍后删除该客户,当您现在尝试插入的订单引用该客户时,您将无法执行此操作。无论如何,这里的重点是客户必须存在于数据库中,然后才能为该特定客户插入订单。
  • SQL server 负责所有的检查这些事情,创建一个外键是在创建表的时候完成的。这将包含在您正在使用的 Orders 表的 create table 语句中:FOREIGN KEY (Cust_id) REFERENCES Customers(Cust_id)。如果您想了解更多信息,请查看此处:w3schools.com/sql/sql_foreignkey.asp
  • 感谢您的解释和链接。我明白了。
【解决方案2】:

从错误消息来看,您的客户表中似乎没有 ID 为“1000000012”的客户记录

【讨论】:

  • 是的。我现在使用了一个存在的客户 ID。插入成功。因此,在您将某些内容插入订单表之前,数据库会检查客户是否存在。你能告诉我这是如何实现的吗?我是新手,正在尝试参加 SQL 速成课程。
  • 在您的订单表的客户 ID 字段中定义了客户的外键。这意味着数据库坚持认为您在该字段中输入的任何 id 在客户表中都有相应的 id。在在线书籍中查找外键以获取更多信息。
猜你喜欢
  • 1970-01-01
  • 2019-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多