MySQL错误150,无法创建表

时间:2009-08-05 12:46:48

标签: mysql mysql-error-1005

我在制作桌子时遇到了麻烦,我不明白什么是错的。 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) 

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

EDIT2: pic已删除

EDIT3:

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 个答案:

答案 0 :(得分:14)

检查Gebruikers_gebruiker_idGebruikersgebruiker_id是否具有相同的数据类型。

同时检查Gebruikers中的gebruiker_idPRIMARY KEYGebruikers

<强>更新

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

修复它(更改为ON DELETE CASCADE或只删除该条款),您将能够创建引用。

答案 1 :(得分:4)

我的情况通常是因为数据类型不匹配。请记住,如果是int检查,两者都是未签名或不是

答案 2 :(得分:2)

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

答案 3 :(得分:1)

添加的另一个原因:

  

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

答案 4 :(得分:0)

在我看来,这是一个非常错误的MySQL特性 - 最简单的方法是转储表结构和数据,然后删除表并从转储中重新运行SQL,然后手动重新创建索引和需要的外键约束。

答案 5 :(得分:0)

我在另一个表中使用了相同名称的约束。 尝试更改约束的名称。