2014-09-24 21 views
0

我在數據庫中創建兩個表錯誤SQL:不能添加或更新子行,外鍵約束失敗

CREATE TABLE ratables (
      id int(11) NOT NULL auto_increment, 
      ratableKey varchar(50) NOT NULL, 
      created_at timestamp NOT NULL default CURRENT_TIMESTAMP, 
     ) AUTO_INCREMENT=1 ; 

CREATE TABLE ratings (
      id int(11) NOT NULL auto_increment, 
      ratable_id int(11) NOT NULL, 
      ip_address varchar(50) NOT NULL, 
      rating int(11) NOT NULL, 
      timestamp timestamp NOT NULL default CURRENT_TIMESTAMP, 
      PRIMARY KEY (id), 
      CONSTRAINT rabid_ratings_fk FOREIGN KEY (ratable_id) REFERENCES 
      ratables(id) 
     ) AUTO_INCREMENT=1 ; 

當我試圖插入

INSERT INTO ratings(ratable_id, ip_address, rating) VALUES ('9', 'ip_adresse', 'rating'); 

它給了我這個錯誤

Cannot add or update a child row: a foreign key constraint fails (bd_pagespro.ratings, CONSTRAINT rabid_ratings_fk FOREIGN KEY (ratable_id) REFERENCES ratables(id)) 

請幫忙!

+0

根據所使用的非標準語法添加了'mysql'標記。 – 2014-09-24 16:07:20

+1

你需要在表格中使用id = 9的記錄。 – 2014-09-24 16:07:36

+0

@a_horse_with_no_name:所有數據庫在某處都有非標準語法。 – siride 2014-09-24 18:21:01

回答

0

這意味着您的餐桌ratables中沒有id ='9'的行。

因爲我不知道你使用了什麼數據庫,我不能確定它不僅僅是一個類型問題。 '9'可能不是一個整數,因此是錯誤。

+0

非標準反引號而不是雙引號強表明它是MySQL – 2014-09-24 16:07:00

+0

非常感謝!實際上它是代碼的一部分,它正在做的插入標準沒有工作,所以最終它不是一個原始的ID = 9! 所以很多! – Marline 2014-09-26 12:21:48

0

關閉這個功能由插入命令之前添加此:

SET foreign_key_checks = 0; 

然後將其設置回您插入後:

SET foreign_key_checks = 1; 

只是要小心,並確保你知道你在做什麼。絕對確保將適當的數據插入到外鍵中。

+0

如果您提到了一些可避免的潛在問題,這無疑會得到改善。 – 2015-03-23 01:12:59

相關問題