发生数据库错误1452
我正在研究一个需要我在phpMyAdmin中使用外键的项目。我在两个表上设置了外键。 tblquestions
被链接到answers
表,但是当我尝试将数据插入到tblquestions
我得到这个错误发生数据库错误1452
数据库出错
错误编号:1452
不能添加或更新子行:一外键约束失败 (
user_test
。tblquestions
,约束tblquestions_ibfk_5
FOREIGN KEY(QID
)参考文献answers
(ID
)ON DELETE CASCADE ON UPDATE CASCADE)INSERT INTO
tblquestions
(Question
,qA
,qB
,qC
)VALUES ( 'unikalus klausimas', 'unikalus atsakymas', 'unikalus atsakymas', 'unikalus atsakymas')
甲外键基本上只不过是规则“表中的条目必须在引用的表中具有相应的值”。
在你的情况下,逻辑是,不存在对不存在问题的答案。所以你以错误的方式提出了外键。
然后,当您插入数据时,您必须首先插入问题的行。当您插入答案的行时,您必须查找答案所属问题的ID。
顺便说一句,请忽略Yogesh Suthar的评论。外键是数据库确保数据完整性的一个非常重要的特性,显然他不知道他在说什么。
tnx帮你解决了错误 – 2013-02-21 10:27:59
如果您已将tblquestions
链接到answers
,则应首先添加一个答案,然后添加问题。否则,由于您试图在父代之前添加子代,因此无法保持参照完整性。 (总是在孩子之前添加父母。)
继承人一种方式来做到这一点。让我们使用两个表格:tbl_question
,tbl_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)
(标记正确的回答问题)
M请拨打question_id
和answer_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。
什么用联接表和表与外键之间的区别? – 2013-02-21 10:12:42
你知道任何教程maby,可以帮助我建立一个连接表吗? – 2013-02-21 10:16:42
@YogeshSuthar - 外键有助于强化参照完整性。请不要建议他人避免使用它们。 – 2013-02-21 10:17:19