3

我在创建表格时遇到问题,我不明白出了什么问题。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
4

6 回答 6

14

检查那个Gebruikers_gebruiker_idGebruikersgebruiker_id具有相同的数据类型。

还要检查Gebruikers. gebruiker_id是一个PRIMARY KEYGebruikers

更新:

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

修复它(更改ON DELETE CASCADE或删除子句),您将能够创建引用。

于 2009-08-05T12:48:52.817 回答
4

我的情况通常是因为数据类型不匹配。请记住,如果它是一个 int 检查两者都是无符号的还是没有的

于 2012-04-12T19:08:21.127 回答
2

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

于 2011-09-05T07:52:17.610 回答
1

再补充一个理由:

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

于 2016-04-02T08:57:35.440 回答
0

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

于 2010-12-01T16:09:34.037 回答
0

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

于 2014-06-24T21:33:08.493 回答