在我的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 :(得分:2)
"精度" int类型意味着什么。它只是显示宽度的提示。它对数据类型的大小没有影响。
导致您的错误的原因是您的products.id
是int 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)