【问题标题】:Trying a into statement error [duplicate]尝试进入语句错误[重复]
【发布时间】:2016-11-11 05:46:24
【问题描述】:

尝试执行简单的 insert into 语句,但出现外键关系错误。

insert into orders (userId, orderDate, shippingDate)
values('xyz123', now(), now()); 

我得到的错误是 “无法添加或更新子行:外键约束失败('example_1010.orders,CONSTRAINTorders_ibfk1FOREIGN KEY (userId) REFERENCESusers(userid`))”

我认为我需要使用“in 子句”来绕过约束,但我认为我没有正确使用它。

insert into orders (userId, orderDate, shippingDate)
values('xyz123', now(), now())
in (select userId from users); 

【问题讨论】:

  • 正如错误明确指出的那样,您不能插入用户表中不存在的userIds。
  • 尝试插入用户表中已经存在的相同userId。

标签: mysql sql foreign-key-relationship in-clause


【解决方案1】:

只需禁用外键

SET FOREIGN_KEY_CHECKS=0;

您不需要添加任何其他内容。你的查询很完美

insert into orders (userId, orderDate, shippingDate)
values('xyz123', now(), now());

之后再次启用外键

SET FOREIGN_KEY_CHECKS=1;

您应该按照@drew 的建议将该 user_id 添加到您的父表(用户)中

【讨论】:

  • 所以基本上插入垃圾?
  • 这种情况在 dba 的一生中发生过很多次。我们必须在某个时候进行这种类型的更正
  • 先修复它所属的数据(父级)。然后修复孩子。否则你会搞砸你的参照完整性,甚至不应该拥有它。
猜你喜欢
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-11
  • 1970-01-01
  • 1970-01-01
  • 2012-03-21
相关资源
最近更新 更多