MySQL错误150,无法创建表

发布于 2024-07-30 18:05:25 字数 1231 浏览 8 评论 0 原文

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

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

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

I'm having trouble creating a table and I don't understand what's wrong. phpMyAdmin sets the error indicator next to the PRIMARY KEY declaration... I don't get why this is wrong...

This table is a child table, which has a one-to-many identifying relationship with another table.

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) 

EDIT: this is all the documentation on the error code I can find: Link

EDIT2: pic removed

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

你丑哭了我 2024-08-06 18:05:25

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

另请检查 Gebruikersgebruiker_id 是否为 Gebruikers 中的 PRIMARY KEY

更新:

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

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

Check that Gebruikers_gebruiker_id and Gebruikers.gebruiker_id have same datatype.

Also check that Gebruikers.gebruiker_id is a PRIMARY KEY in Gebruikers

Update:

You have ON DELETE SET NULL defined, while your Gebruikers_gebruiker_id is defined as NOT NULL.

Fix it (change to ON DELETE CASCADE or just remove the clause) and you'll be able to create the reference.

始终不够 2024-08-06 18:05:25

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

Im my case its typically because of a datatype mismatch. Remember if it is an int check that both are either unsigned or not

捂风挽笑 2024-08-06 18:05:25

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

This is'nt much a buggy characteristic of mysql.
There can be two possible reasons for this!
1) the datatypes of the PK and the FK dont match.
2) This error can come up in versions prior to 4.1 where you need to explicitly define indexes.

九局 2024-08-06 18:05:25

还有一个需要补充的理由:

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

One more reason to add:

Different charset or engine will also cause this problem

方觉久 2024-08-06 18:05:25

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

In my person experience this a very buggy characteristic of MySQL - and the least hassle is to just dump the table structure and data, then drop the table and re-run the SQL from the dump and then manually re-create indexes and foreign key constraints where needed.

郁金香雨 2024-08-06 18:05:25

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

I had a constraint with the same name in a different table.
Try changing the name of your constraint.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文