2014-09-24 102 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

相关问题