【问题标题】:cannot add or update a child row a foreign key constraint fails mysql无法添加或更新子行外键约束失败mysql
【发布时间】:2013-08-10 04:08:42
【问题描述】:

您好,我对 mysql 还很陌生,并且尝试了其他一些针对此问题的建议修复,但没有运气!我正在尝试在表应用程序和客户之间创建一个外键,但是当我运行我的程序时,我收到错误“cannot add or update a child row a foreign key constraint fails mysql”。我的程序是一个数据捕获表单,旨在将信息插入数据库。

表架构:

申请表:

applicationid mediumint(9)
covertype varchar(100)
customeremail varchar(100)

客户表:

customeremail varchar(100)
customerfname varchar(100)
applicationid mediumint(9)

我尝试通过几种不同的方式设置外键,例如 更改表应用程序添加外键(customeremail)引用客户(customeremail) 更改表客户添加外键(applicationid)引用应用程序(applicationid)

但这没有用,我很感激有关如何解决问题的任何建议

【问题讨论】:

  • 添加向您提供错误的查询与我们分享到目前为止您尝试了什么?
  • 首先你应该阅读数据库规范化:en.wikipedia.org/wiki/Database_normalization
  • 您好,欢迎来到 stackoverflow。也许您应该花一些时间来编辑您的问题以显示更多上下文信息和/或相关信息。无论如何,在等待答案的同时,我建议您花点时间阅读stackoverflow.com/help/someone-answers

标签: mysql constraints


【解决方案1】:

你应该试试那个语法:

alter table application 
         add foreign key(customeremail) 
         references application(applicationid)

这意味着,表application 中的列customeremail 中的值仅在表中(至少)一行的applicationid 列中存在相同值时才允许使用application.

根据您的背景,您可以将其视为“指针”——但关系代数关系是双向的。

此外,要使其工作,您必须目标上有一个索引。在这里application.applicationid。如果不是的情况,你应该写:

alter table application add index (applicationid)

我的猜测这应该是没有必要的,因为applicationid 很有可能是你的PRIMARY KEY


顺便说一句,正如 Stephan 在评论中所建议的那样,由于您“对 DB 很陌生”,因此您应该明确地查看有关 database normalizationreferential integrity 的适当文档。

【讨论】:

  • 嗨 Sylvain 我试过了,得到以下错误:1005 Can't create table '40029562.#sql-9d8_ac' //40029562 is my schema name
  • @Claire 这是一条奇怪的错误消息。您可以尝试在sqlfiddle.com 中创建您的表格吗?这对我们来说更容易测试和尝试。
猜你喜欢
  • 2015-07-26
  • 2012-10-09
  • 2015-06-06
  • 2016-08-09
  • 2011-03-31
  • 1970-01-01
  • 2016-05-23
  • 2012-03-14
  • 1970-01-01
相关资源
最近更新 更多