Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t在具有相同列的MySQL中添加外键_Mysql_Sql - Fatal编程技术网

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