MySql错误150 - 外键

Mar*_*rau 17 mysql foreign-keys mysql-error-150

当我执行以下两个查询时(我已将它们剥离到绝对必要):

mysql> CREATE TABLE foo(id INT PRIMARY KEY);
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE TABLE bar ( id INT, ref INT, FOREIGN KEY (ref) REFERENCES foo(id)) ENGINE InnoDB;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:ERROR 1005(HY000):无法创建表'./test/bar.frm'(错误号:150)

****是我的错误?我盯着这个半小时没找到他.

Gre*_*reg 30

来自FOREIGN KEY约束

如果重新创建已删除的表,则它必须具有符合引用它的外键约束的定义.它必须具有正确的列名和类型,并且必须在引用的键上具有索引,如前所述.如果不满足这些,MySQL将返回错误号1005并在错误消息中引用错误150.

怀疑是因为你没有创建fooInnoDB,因为其他一切看起来还不错.

编辑:从同一页面 -

两个表都必须是InnoDB表,它们不能是TEMPORARY表.


小智 11

您可以使用该命令SHOW ENGINE INNODB STATUS获取有关错误的更多特定信息.

它将为您提供Status包含大量文本的列的结果.

查找名为LATEST FOREIGN KEY ERROR的部分,例如,如下所示:

------------------------
LATEST FOREIGN KEY ERROR
------------------------
190215 11:51:26 Error in foreign key constraint of table `mydb1`.`contacts`:
Create  table `mydb1`.`contacts` with foreign key constraint failed. You have defined a SET NULL condition but column 'domain_id' is defined as NOT NULL in ' FOREIGN KEY (domain_id) REFERENCES domains (id) ON DELETE SET NULL ON UPDATE CASCADE,
    CONSTRAINT contacts_teams_id_fk FOREIGN KEY (team_id) REFERENCES teams (id) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT' near ' ON DELETE SET NULL ON UPDATE CASCADE,
    CONSTRAINT contacts_teams_id_fk FOREIGN KEY (team_id) REFERENCES teams (id) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT'.
Run Code Online (Sandbox Code Playgroud)