Can';t在具有相同列的MySQL中添加外键
我有两个表,每个表都有一个Can';t在具有相同列的MySQL中添加外键,mysql,sql,Mysql,Sql,我有两个表,每个表都有一个provider列: CREATE TABLE `title` ( `provider` varchar(40) CHARACTER SET latin1 NOT NULL, CREATE TABLE `notification` ( `provider` varchar(40) CHARACTER SET latin1 NOT NULL, 但是,当我尝试添加外键时 ALTER TABLE notification ADD FOREIGN KEY (prov
provider
列:
CREATE TABLE `title` (
`provider` varchar(40) CHARACTER SET latin1 NOT NULL,
CREATE TABLE `notification` (
`provider` varchar(40) CHARACTER SET latin1 NOT NULL,
但是,当我尝试添加外键时
ALTER TABLE notification ADD FOREIGN KEY (provider) REFERENCES title (provider)
我得到以下模糊错误:
Can't create table 'metadata.#sql-c91_345b' (errno: 150)
两张桌子都是空的。为什么会发生这种情况?我需要做什么来修复这种情况?运行
显示引擎INNODB状态\G
,查看“最新外键错误”以查看有关错误的更多详细信息。说:
InnoDB需要外键和引用键的索引,以便
外键检查可以很快,不需要扫描表
在引用表中,必须有外键所在的索引
列按相同顺序列为第一列
这样的索引会在引用表上自动创建,如果
不存在
(这与一些旧版本不同,在旧版本中,索引必须
必须显式创建,否则将无法创建外键约束
失败。)索引_名称(如果给定)如前所述使用
我认为在创建指向它的外键之前,应该为
title.provider
创建任何(唯一、主或普通)索引。在添加引用它的外键之前,尝试将provider
设为主键。这是因为存在另一个主键吗?我很好奇在这种情况下你是否可以链接到真实的PK。我这里有一个自动递增的PK id,但即使我删除了该列(并且没有主键),我也遇到了相同的错误。你能使用title的自动递增整数PK而不是varchar(40)PK吗?我认为MySQL过去需要在目标列(即标题的提供者)上有一个唯一的索引;它在更高版本中可能已更改,但值得一试,看看是否有帮助。您是否意外地使用了MyISAM
引擎而不是InnoDB
?