2013-02-21 73 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。