使用HeidiSQL在MySQL中尝试添加外键

6

我一直在尝试使用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) */

如果还有其他需要提供的,请让我知道,这真的让我很烦恼。我也正在使用随xampp安装程序提供的5.5.27-MySQL Community Server (GPL)版本。

3个回答

2

在此输入图片描述

如果您正在使用HeidiSQL,这很容易。

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

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


1
我找到了。抱歉大家。问题是我的字段默认值为0,而我的原始表没有0的值。

1
这是如何操作的:
  1. 创建您的主键。对我来说,这很简单,所以我不会在此处发布如何执行此操作

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接