2013-02-21 61 views
0

我正在研究一个需要我在phpMyAdmin中使用外键的项目。我在两个表上设置了外键。 tblquestions被链接到answers表,但是当我尝试将数据插入到tblquestions我得到这个错误发生数据库错误1452

数据库出错

错误编号:1452

不能添加或更新子行:一外键约束失败 (user_testtblquestions,约束tblquestions_ibfk_5 FOREIGN KEY(QID)参考文献answersID)ON DELETE CASCADE ON UPDATE CASCADE)

INSERT INTO tblquestionsQuestionqAqBqC)VALUES ( 'unikalus klausimas', 'unikalus atsakymas', 'unikalus atsakymas', 'unikalus atsakymas')

+0

什么用联接表和表与外键之间的区别? – 2013-02-21 10:12:42

+0

你知道任何教程maby,可以帮助我建立一个连接表吗? – 2013-02-21 10:16:42

+2

@YogeshSuthar - 外键有助于强化参照完整性。请不要建议他人避免使用它们。 – 2013-02-21 10:17:19

回答

1

甲外键基本上只不过是规则“表中的条目必须在引用的表中具有相应的值”。

在你的情况下,逻辑是,不存在对不存在问题的答案。所以你以错误的方式提出了外键。

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

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

+0

tnx帮你解决了错误 – 2013-02-21 10:27:59

0

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

继承人一种方式来做到这一点。让我们使用两个表格:tbl_questiontbl_answer

tbl_question至少有两列:

  • ID:int
  • 问题:text

tbl_answer包含的答案,如果你喜欢添加了一套可能是正确(或错误一个问题的可选答案)。

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

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


虽然你已经接受一个答案,而我一直在写这个我会后这个答案。像Tombom说的,你有一个FK建立了错误的方式。

通过询问关于使用连接设置表的教程不确定您的意思。你应该先熟悉外键的概念,然后你可以用任何你喜欢的方式加入你的表格。这里有几个链接。

FK的概念是很简单这是关系到另一个表中的列的列(你参加两个或两个以上通过使用外键列的值)。只需记住在这些表/值之间添加FK约束,以便在您尝试执行某些打破约束条件时RDBMS会提醒您。当你试图给一个不存在的问题添加一个答案时,就像这里一样。

最后,如果您关心参照完整性(如每个数据库设计者/经理/管理员应该),最后使用InnoDB。