繁体   English   中英

MySQL错误150,无法创建表

[英]MySQL error 150, cannot create table

我在创建表时遇到了麻烦,但我不明白怎么了。 phpMyAdmin在PRIMARY KEY声明旁边设置错误指示符...我不知道为什么这是错误的...

该表是一个子表,它与另一个表具有一对多的标识关系。

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) 

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

EDIT2: 图片已删除

编辑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

检查Gebruikers_gebruiker_idGebruikers gebruiker_id具有相同的数据类型。

还要检查Gebruikers gebruiker_id是一个PRIMARY KEYGebruikers

更新:

您已定义ON DELETE SET NULL ,而您的Gebruikers_gebruiker_id被定义为NOT NULL

对其进行修复(更改为ON DELETE CASCADE或仅删除子句),便可以创建引用。

我的情况通常是由于数据类型不匹配。 请记住,如果这是一个int检查,则两者都是未签名的

这并不是mysql的错误特征。 可能有两个原因! 1)PK和FK的数据类型不匹配。 2)在您需要显式定义索引的4.1之前的版本中,可能会出现此错误。

添加的另一个原因:

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

我在另一个表中有一个具有相同名称的约束。 尝试更改约束的名称。

以我个人的经验,这是MySQL的一个非常多虫的特性-最小的麻烦是仅转储表结构和数据,然后删除表并从转储中重新运行SQL,然后手动重新创建索引和外键约束在需要的地方。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM