将FOREIGN KEY添加到MySQL表时出错150

时间:2015-02-15 17:26:22

标签: mysql foreign-keys

我不确定为什么我总是遇到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    |                |
+-----------+------------+------+-----+---------+----------------+

我没有创建一个被删除的表。

1 个答案:

答案 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;

另外,确保两者都使用相同的引擎和字符集,否则它仍然会失败。