我一直在尝试使用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)。
答案 0 :(得分:1)
答案 1 :(得分:1)
以下是如何做到这一点;
创建主键。对我来说这是直截了当所以我不会在这里发布如何做到这一点
要创建FOREIGN KEYS,您需要将每个表的表/引擎类型从MyIASM更改为InnoDb。要执行此操作选择右侧的表格,然后选择右侧的OPTIONS选项卡,并将每个表格的引擎从MyIASM更改为InnoDb。
答案 2 :(得分:0)
我找到了。对不起大家。问题是我的字段默认值为0,而原始表格没有0的值。