![](/img/trans.png)
[英]MySQL Error 1064 when adding foreign key with MySQL Workbench
[英]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.