MySQL错误150,无法创建表。

3

我在创建一个表格时遇到了问题,但不明白出了什么问题。phpMyAdmin在主键声明旁边设置了错误指示器...我不知道这是为什么...

这个表格是一个子表格,与另一个表格有一对多的识别关系。

CREATE TABLE IF NOT EXISTS `ruilen`.`Voorwerpen` (
`voorwerpen_id` INT NOT NULL AUTO_INCREMENT ,
`naam` VARCHAR( 45 ) NOT NULL ,
`beschrijving` VARCHAR( 45 ) NULL ,
`Gebruikers_gebruiker_id` INT NOT NULL ,
PRIMARY KEY ( `voorwerpen_id` , `Gebruikers_gebruiker_id` ) ,
CONSTRAINT `fk_Voorwerpen_Gebruikers1` FOREIGN KEY ( `Gebruikers_gebruiker_id` ) REFERENCES `ruilen`.`Gebruikers` (
`gebruiker_id`
) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE = InnoDB;

MySQL said: Documentation
#1005 - Can't create table 'ruilen.voorwerpen' (errno: 150) 

编辑:这是我能找到的有关错误代码的所有文档:链接

编辑2:图片已删除

编辑3:

CREATE TABLE `gebruikers` (
 `gebruiker_id` int(11) NOT NULL,
 `naam` varchar(45) NOT NULL,
 `straat` varchar(45) NOT NULL,
 `gemeente` varchar(45) NOT NULL,
 `mail` varchar(45) NOT NULL,
 `beschrijving` varchar(45) DEFAULT NULL,
 PRIMARY KEY (`gebruiker_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
6个回答

14

检查Gebruikers_gebruiker_idGebruikers.gebruiker_id的数据类型是否相同。

还要检查Gebruikers.gebruiker_id是否为Gebruikers中的PRIMARY KEY

更新:

你定义了ON DELETE SET NULL,而你的Gebruikers_gebruiker_id被定义为NOT NULL

修复这个问题(将其更改为ON DELETE CASCADE或者只是删除该条件),然后你就可以创建引用了。


附加图片以获取更多信息,您所说的似乎是正确的。 - KdgDev
请运行此语句:SHOW CREATE TABLE Gebruikers 并在此处发布其输出结果? - Quassnoi
我在想是否需要将gebruiker_id设置为唯一的...但是MySQL Workbench似乎没有这个选项... - KdgDev
@WebDevHobo:gebruiker_id 是一个 PRIMARY KEY,这意味着它是 UNIQUE 的。真正的问题在于 ON DELETE CASCADE - Quassnoi
谢谢,大多数“添加外键”的错误都在于“设置为空”。他们忘记了将字段设置为允许“空”。 - GusDeCooL

4
在我的情况下,这通常是由于数据类型不匹配。请记住,如果它是一个整数,请检查两个值是否都为 unsigned 或者都不是。

2

这不是mysql的一个常见错误特性。可能有两个原因! 1)PK和FK的数据类型不匹配。 2)在4.1版本之前,需要明确定义索引才会出现此错误。


1

再增加一个原因:

不同的字符集或引擎也会导致这个问题


0
在我的个人经验中,这是MySQL非常有缺陷的特性 - 最简单的方法就是转储表结构和数据,然后删除表并从转储中重新运行SQL,然后手动重新创建所需的索引和外键约束。

0

我在另一张表中有一个同名的约束条件。 尝试更改您的约束条件名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接