我不确定为什么我总是遇到FOREIGN KEYs的问题,但我又有一个问题。
当我跑步时:
ALTER TABLE wishlist ADD CONSTRAINT FOREIGN KEY (user_id) REFERENCES user (user_id);
我明白了:
Can't create table (errno: 150)
两个表都存在。两列都存在,它们都是相同的类型 - bigint(20)。 user.user_id是主键,但wishlist.user_id不是。两者都是NOT NULL
这里是用户表的开头(为了便于阅读,我将其截断):
+-----------------+------------------------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+------------------------------+------+-----+-------------------+----------------+
| user_id | bigint(20) | NO | PRI | NULL | auto_increment |
| salt2 | varchar(24) | YES | | NULL | |
| gender | enum('MAN','WOMAN','EITHER') | NO | | NULL | |
| user_name | varchar(255) | NO | | NULL | |
| password | varchar(255) | NO | | NULL | |
| user_email | varchar(255) | NO | | NULL | |
| phone | varchar(20) | NO | | NULL | |
wishlist
表:
+-----------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+------------+------+-----+---------+----------------+
| wish_id | int(11) | NO | PRI | NULL | auto_increment |
| link_hash | char(32) | YES | MUL | NULL | |
| user_id | bigint(20) | NO | | NULL | |
+-----------+------------+------+-----+---------+----------------+
我没有创建一个被删除的表。
答案 0 :(得分:1)
如果您使用的是InnoDB,则user_id列必须是“key”或“primary key”类型,而不是类型bigint。该特定引擎不喜欢在非关键项上创建FK约束。
CREATE TABLE 'user' (
KEY 'user_id' ('user_id')
[... your columns here]
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
另外,确保两者都使用相同的引擎和字符集,否则它仍然会失败。