繁体   English   中英

添加外键时出错 - MySQL

[英]Error when adding foreign key - MySQL

我的数据库中有两个表,用户和帖子,我试图在post(author)和user(id)之间创建一个外键,但是我一直收到以下错误:

ERROR 1005 (HY000): Can't create table 'fortifya_rasp.#sql-c1c_2151546' (errno: 150)

我已经看到了关于SO和各种谷歌搜索的其他几个问题,但没有一个回答解决了我的问题。 这是我尝试过的查询

ALTER TABLE post ADD COLUMN author INT, ADD FOREIGN KEY (author) REFERENCES user(id);

以下是帖子的架构:

+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| id        | int(11)      | NO   | PRI | NULL    | auto_increment |
| timestamp | datetime     | NO   |     | NULL    |                |
| title     | varchar(255) | NO   |     | NULL    |                |
| content   | longtext     | NO   |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+

和用户:

+-------------------------+--------------+------+-----+---------+-------+
| Field                   | Type         | Null | Key | Default | Extra |
+-------------------------+--------------+------+-----+---------+-------+
| id                      | int(11)      | NO   | PRI | 0       |       |
| firstname               | varchar(255) | YES  |     | NULL    |       |
| lastname                | varchar(255) | YES  |     | NULL    |       |
| fullname                | varchar(255) | YES  |     | NULL    |       |
| email                   | varchar(255) | YES  |     | NULL    |       |
| password                | varchar(100) | YES  |     | NULL    |       |
| joined_at               | datetime     | YES  |     | NULL    |       |
| is_admin                | smallint(6)  | YES  |     | NULL    |       |
+-------------------------+--------------+------+-----+---------+-------+

更新

我已经尝试过此查询并仍然收到相同的错误:

ALTER TABLE post ADD COLUMN author INT NOT NULL, ADD INDEX (author), ADD FOREIGN KEY (author) REFERENCES user(id);

当我在命令后尝试获取状态时,我得到:

ERROR 1227 (42000): Access denied; you need (at least one of) the PROCESS privilege(s) for this operation

然后,我显然尝试通过添加权限来查看此信息

GRANT ALL PRIVILEGES ON * . * TO 'fortifya'@'%';

然后我得到一个与此相关的错误:

ERROR 1045 (28000): Access denied for user 'fortifya'@'localhost' (using password: YES)

当单独运行alter语句时,我可以添加author列并创建索引,如下所示,但在尝试创建外键时仍然失败:

+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| id        | int(11)      | NO   | PRI | NULL    | auto_increment |
| timestamp | datetime     | NO   |     | NULL    |                |
| title     | varchar(255) | NO   |     | NULL    |                |
| content   | longtext     | NO   |     | NULL    |                |
| author    | int(11)      | NO   |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+

发布索引

这可能是由与另一个表的外键关系引起的问题吗?

author列需要一个索引(并且必须是与user(id)列完全相同的类型,即not null )。

您可以将查询拆分为三个查询(添加列,添加索引,添加外键)或尝试添加, add index(author)直接, add index(author) , ADD FOREIGN KEY (author) REFERENCES user(id)

通过发布SHOW ENGINE INNDODB STATUS;可以收集更多细节SHOW ENGINE INNDODB STATUS;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM