我使用phpMyAdmin快速创建数据库,然后通过sql手动添加约束。当我查看sql转储文件时,它包含以下内容(来自mysqldump)。对我来说,同时拥有键和约束似乎是没有必要的。
键和约束是否重复?
DROP TABLE IF EXISTS `menu_item_option_ingredients`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `menu_item_option_ingredients` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`menu_item_option_id` int(11) NOT NULL,
`ingredient_id` int(11) NOT NULL,
`quanity` decimal(23,10) NOT NULL,
PRIMARY KEY (`id`),
KEY `menu_item_option_ingredients_ibfk_1` (`menu_item_option_id`),
KEY `menu_item_option_ingredients_ibfk_2` (`ingredient_id`),
CONSTRAINT `menu_item_option_ingredients_ibfk_2` FOREIGN KEY (`ingredient_id`) REFERENCES `ingredients` (`id`),
CONSTRAINT `menu_item_option_ingredients_ibfk_1` FOREIGN KEY (`menu_item_option_id`) REFERENCES `menu_item_options` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;发布于 2015-01-06 02:00:13
是的,你可以在没有键的情况下拥有一个约束,所以如果你不想/不需要键,你可以安全地删除它们。
键和约束具有不同的用途。
编辑:实际上,让我改正一下。当您在InnoDb中添加约束时,它总是被自动索引,并显示为一个键(它们是同义词)。您在show create table中看到的只是创建的索引。
发布于 2015-01-06 02:06:52
它们不是多余的。如果你添加了一个没有键的外键,那么将会隐式地为你创建一个键,但我个人更喜欢显式地创建键,这样我就可以选择它的名称。
https://stackoverflow.com/questions/27785051
复制相似问题