我有一个名为的表格foodlist
,其中包含食物:
CREATE TABLE `foodlist` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
示例数据:
id | name
1 | Apple
2 | Banana
3 | Cinnamon
然后我有一张可以一起吃的食物组合表:
CREATE TABLE `foodlist-also_eat` (
`originalFood` int(10) NOT NULL,
`alsoFood` int(10) NOT NULL,
PRIMARY KEY (`originalFood`,`alsoFood`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
这意味着,如果您可以将苹果和香蕉一起吃,则输入为:
originalFood | alsoFood
1 2
现在,我要做的就是在foodlist-also_eat
表中添加外键。
我可以为添加一个originalFood
:
ALTER TABLE `foodlist-also_eat`
ADD FOREIGN KEY (`originalFood`) REFERENCES `foodlist` (`id`)
ON DELETE RESTRICT ON UPDATE RESTRICT;
查询确定。
但是,我无法继续为添加一个alsoFood
:
ALTER TABLE `foodlist-also_eat`
ADD FOREIGN KEY (`alsoFood`) REFERENCES `foodlist` (`id`)
ON DELETE RESTRICT ON UPDATE RESTRICT;
源列和目标列必须具有相同的数据类型,目标列上必须有一个索引,并且引用的数据必须存在。表'./dev@002dfood/foodlist@002dalso_eat'已存在
我在这里做错了什么?
如果给出了CONSTRAINT符号子句,则符号值在数据库中必须是唯一的。如果未提供该子句,InnoDB会自动创建名称。
请注意,从5.0.38版本开始,InnoDB允许在该列上使用两个或多个外键,它们可以引用不同的表/列。它甚至允许具有相同定义但约束名称不同的外键。
为每个要定义的约束定义一个唯一的名称。
ALTER TABLE `foodlist-also_eat`
ADD constraint fk_of_flae
FOREIGN KEY (`originalFood`)
REFERENCES `foodlist` (`id`)
ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `foodlist-also_eat`
ADD constraint fk_af_flae
FOREIGN KEY (`alsoFood`)
REFERENCES `foodlist` (`id`)
ON DELETE RESTRICT ON UPDATE RESTRICT;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句