4

我一直在尝试使用 heidisql 将外键添加到我的表中,但我不断收到错误 1452。

在阅读之后,我确保我的所有表都在 InnoDB 上运行,并检查它们是否具有相同的数据类型,我可以添加密钥的唯一方法是如果我删除所有我不打算做的数据,因为我有在这上面花了好几个小时。

这是我的表创建代码:

CREATE TABLE `data` (
`ID` INT(10) NOT NULL AUTO_INCREMENT,
#bunch of random other columns stripped out
`Ability_1` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
#more stripped tables
`Extra_Info` SET('1','2','3','Final','Legendary') NOT NULL DEFAULT '1' COLLATE 'utf8_unicode_ci',
PRIMARY KEY (`ID`),
UNIQUE INDEX `ID` (`ID`)
)
COLLATE='utf8_unicode_ci'
ENGINE=InnoDB
AUTO_INCREMENT=650;

这是表2

CREATE TABLE `ability` (
`ability_ID` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
#stripped columns
`Name_English` VARCHAR(12) NOT NULL COLLATE 'utf8_unicode_ci',
PRIMARY KEY (`ability_ID`),
UNIQUE INDEX `ability_ID` (`ability_ID`)
)
COLLATE='utf8_unicode_ci'
ENGINE=InnoDB
AUTO_INCREMENT=165;

最后是创建代码以及错误。

ALTER TABLE `data`
ADD CONSTRAINT `Ability_1` FOREIGN KEY (`Ability_1`) REFERENCES `ability` (`ability_ID`) ON UPDATE CASCADE ON DELETE CASCADE;
/* SQL Error (1452): Cannot add or update a child row: a foreign key constraint fails (`check`.`#sql-ec0_2`, CONSTRAINT `Ability_1` FOREIGN KEY (`Ability_1`) REFERENCES `ability` (`ability_ID`) ON DELETE CASCADE ON UPDATE CASCADE) */

如果还有什么我可以提供的,请让我知道这真的很困扰我。我还在使用 5.5.27 - xampp 安装程序附带的 MySQL 社区服务器 (GPL)。

4

3 回答 3

1

这是你如何做到的;

  1. 创建您的主键。对我来说这很简单,所以我不会在这里发布如何做到这一点

  2. 要创建外键,您需要将每个表的表/引擎类型从 MyIASM 更改为 InnoDb。为此,请选择右侧的表,然后选择右侧的 OPTIONS 选项卡,并将每个表的引擎从 MyIASM 更改为 InnoDb。

于 2018-04-14T19:40:58.790 回答
1

在此处输入图像描述

如果您使用的是 HeidiSQL,这很容易。

只需看到图像,单击+添加以添加外键。

我更喜欢创建表及其属性的 GUI 方式,因为它可以节省时间并减少错误。

于 2017-09-04T11:19:00.977 回答
0

我找到了。对不起大家。问题是我有 0 作为我的字段的默认值,而我的原始表没有 0 的值。

于 2013-04-17T13:28:01.840 回答