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
如果重新创建已删除的表,则它必须具有符合引用它的外键约束的定义.它必须具有正确的列名和类型,并且必须在引用的键上具有索引,如前所述.如果不满足这些,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)