mysql表创建好后添加外键
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql表创建好后添加外键相关的知识,希望对你有一定的参考价值。
参考技术A 首先要创建一个字段:alter table 表名 add 字段名 字段类型;再添加外键约束:alter table 需加外键的表 add constraint 外键名 foreign key(需加外键表的字段名) references 关联表名(关联字段名);
注意:外键名不能重复
尝试使用 heidisql 在 mysql 中添加外键
【中文标题】尝试使用 heidisql 在 mysql 中添加外键【英文标题】:Trying to add foreign key in mysql with heidisql 【发布时间】:2013-04-09 16:02:56 【问题描述】:我一直在尝试使用 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)。
【问题讨论】:
【参考方案1】:如果您使用的是 HeidiSQL,这很容易。
只看图片,点击+Add添加外键。
我更喜欢 GUI 方式来创建表及其属性,因为它可以节省时间并减少错误。
【讨论】:
【参考方案2】:你可以这样做;
创建您的主键。对我来说这是直截了当的,所以我不会在这里发布如何做到这一点
要创建外键,您需要将每个表的表/引擎类型从 MyIASM 更改为 InnoDb。为此,请选择右侧的表,然后选择右侧的 OPTIONS 选项卡,并将每个表的引擎从 MyIASM 更改为 InnoDb。
【讨论】:
【参考方案3】:我找到了。对不起大家。问题是我将 0 作为字段的默认值,而我的原始表没有 0 的值。
【讨论】:
以上是关于mysql表创建好后添加外键的主要内容,如果未能解决你的问题,请参考以下文章