Mysql错误添加外键

时间:2017-04-21 05:21:20

标签: php mysql database

在我的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

请帮我解决问题所在,如何弄明白

3 个答案:

答案 0 :(得分:2)

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

导致您的错误的原因是您的products.idint unsigned,但您正在尝试为review.product_id(已签名)int声明外键。

signed和unsigned int之间的区别在于使数据类型与参照完整性不兼容。你可以制作一个int(10) unsigned而另一个int(327) unsigned就可以了。

答案 1 :(得分:1)

错误可能有两个原因。

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

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

通过更改表结构使精度相同

要创建外键关系,父表列必须是 唯一或主要列。

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

答案 2 :(得分:0)

改变你的表结构

  

id | INT(11)

或设置

  

product_id | int(10)unsigned

哪种方式适合你。您也可以从here

更好地了解FOREIGN KEY