发生数据库错误 1452

Posted

技术标签:

【中文标题】发生数据库错误 1452【英文标题】:A Database Error Occurred 1452 【发布时间】:2013-02-06 14:33:15 【问题描述】:

我正在做一个需要我在 phpMyAdmin 中使用外键的项目。我在两个表上设置了外键。 tblquestions 链接到 answers 表,但是当我尝试将数据插入 tblquestions 时,我收到此错误

发生数据库错误

错误号:1452

无法添加或更新子行:外键约束失败 (user_test.tblquestions, 约束tblquestions_ibfk_5 外国 KEY (QID) REFERENCES answers (ID) ON DELETE CASCADE ON UPDATE 级联)

插入tblquestionsQuestionqAqBqC)值 ('unikalus klausimas','unikalus atsakymas','unikalus atsakymas', 'unikalus atsakymas')

【问题讨论】:

带连接的表和带外键的表有什么区别? 你知道有什么教程可以帮助我建立一个带有连接的表吗? @YogeshSuthar - 外键有助于加强参照完整性。请不要建议其他人避免使用它们。 【参考方案1】:

如果您已将tblquestions 链接到answers,则应先添加答案,然后添加问题。否则,由于您试图在父级之前添加子级,因此无法保持参照完整性。 (始终在子级之前添加父级。)

这是一种方法。让我们使用两个表:tbl_questiontbl_answer

tbl_question 至少有两列:

ID:int 问题:text

tbl_answer 包含可能正确的答案(如果您想为一个问题添加一组可选答案,则可能是错误的)。

question_id: int,FK 到 tbl_question id answer_option:tinyint(1)/char(1),单个问题的一组可选答案 回答:text is_correct: tinyint(1)/byte(1)(标记问题的正确答案)

使question_idanswer_option 成为复合PK。现在您可以通过id/question_id 加入这两个表,并获得一个问题的所有可选答案。只需确保其中只有一个被标记为正确即可。


我会发布这个答案,尽管在我写这篇文章时你已经接受了一个答案。就像 tombom 说的,你有一个 FK 建立错误的方式。

不知道您通过询问有关设置带有联接的表的教程是什么意思。您应该首先熟悉外键的概念,然后您可以以任何您喜欢的方式加入您的表。这里有几个链接。

http://en.wikipedia.org/wiki/Foreign_key http://www.sitepoint.com/mysql-foreign-keys-quicker-database-development/ What is the difference between Left, Right, Outer and Inner Joins? http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

FK 的概念非常简单,就是与另一个表上的列相关的列(通过使用外键列的值连接两个或多个表)。只要记住在这些表/值之间添加一个 FK 约束,这样当您尝试做一些破坏约束的事情时,RDBMS 就会向您发出警告。就像这里当您尝试为不存在的问题添加答案时一样。

最后,如果您关心引用完整性,请使用 InnoDB(每个 DB 设计者/经理/管理员都应该这样做)。

http://dev.mysql.com/doc/refman/5.5/en/ansi-diff-foreign-keys.html

【讨论】:

【参考方案2】:

外键基本上无非是“表中的条目必须在被引用表中具有对应值”的规则。

在您的情况下,逻辑是,不存在的问题不可能有答案。所以你把外键放错了。

然后,当您插入数据时,您必须先插入问题的行。当您插入答案的行时,您必须查找答案所属问题的 ID。

顺便说一句,请忽略 Yogesh Suthar 的 cmets。外键是确保数据完整性的数据库的一个非常重要的特性,显然他不知道他在说什么。

【讨论】:

以上是关于发生数据库错误 1452的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 错误 1452 - 无法插入数据

接收错误 #1452 - 无法添加或更新子行”

Mysql 错误 #1452 - 无法添加或更新子行

为啥执行这些表时会出现错误1452? [复制]

MySQL 中的外键约束错误 1452 - Magento 导入

完整性约束违规:1452 无法将子行添加或更新到我的数据库中