2017-04-21 98 views
-1

在我的MySQL数据库我有两个表的审查和产品MySQL错误无法添加当我添加外键约束外键

mysql> desc review; 
+---------------+--------------+------+-----+-------------------+----------------+ 
| Field   | Type   | Null | Key | Default   | Extra   | 
+---------------+--------------+------+-----+-------------------+----------------+ 
| id   | int(11)  | NO | PRI | NULL    | auto_increment | 
| review  | varchar(255) | YES |  | NULL    |    | 
| rating  | varchar(255) | YES |  | NULL    |    | 
| created_at | timestamp | NO |  | CURRENT_TIMESTAMP |    | 
| updated_at | timestamp | NO |  | CURRENT_TIMESTAMP |    | 
| reviewer_name | varchar(255) | YES |  | NULL    |    | 
| product_id | int(11)  | YES |  | NULL    |    | 
+---------------+--------------+------+-----+-------------------+----------------+ 

mysql> desc products; 
+---------+------------------+------+-----+---------+----------------+ 
| Field | Type    | Null | Key | Default | Extra   | 
+---------+------------------+------+-----+---------+----------------+ 
| id  | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| name | varchar(255)  | NO |  | NULL |    | 
| details | text    | NO |  | NULL |    | 
+---------+------------------+------+-----+---------+----------------+ 
3 rows in set (0.00 sec) 

当我试图在审查表作为外键的product_id引用ID在产品表,我发现这个错误,什么我给查询是:

mysql> ALTER TABLE review ADD FOREIGN KEY (product_id) REFERENCES products(id); 
ERROR 1215 (HY000): Cannot add foreign key constraint 

请大家帮我出了什么问题,我怎么能弄清楚

+0

可能和int 11 – GurV

+0

所以我想现在要做的是 – Karthiga

+0

我改变了它正常工作。谢谢 – Karthiga

回答

1

可能有两个意图儿子的错误。

数据类型的精度是不同的两列,即

products -> id | int(10) unsigned // here int(10) 
product_id  | int(11)   // here int(11) 

使精度同样通过修改表结构

要建立外键关系船父表列必须 唯一或主列。

因此,检查products(id)是主要的还是唯一的,如果不是主要的或唯一的。

+0

我插入评论(评论,评级,评论员名称,产品ID)值('产品很好','4','约翰德奥','1');当我尝试在评论表中插入值时需要另一个帮助。 错误1452(23000):无法添加或更新子行:外键约束失败('birdys_dev'。''review',CONSTRAINT'review_ibfk_1' FOREIGN KEY('product_id')REFERENCES'products'('id')) ' – Karthiga

+0

您能否帮我 – Karthiga

+1

有了外键关系,您只能在子表中插入这些值已经出现在父表中的外键绑定列 –

2

int类型的“精度”意味着什么。这只是显示宽度的提示。它对数据类型的大小没有影响。

是什么原因造成的错误是你的products.idint unsigned,但你想申报review.product_id一个外键这是int(签字)。

signed和unsigned int之间的区别是数据类型与参照完整性不兼容。你可以做一个int(10) unsigned和其他int(327) unsigned,它会没事的。

+0

好的回答.... –

0

改变你的表结构

ID | INT(11)

或设置

PRODUCT_ID | int(10)unsigned

做哪种方式是你的面糊。同时你也可以由于INT 10之间的数据类型不匹配的精度得到更好的了解有关FOREIGN KEY从here