首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >键+约束mysql 5似乎重复

键+约束mysql 5似乎重复
EN

Stack Overflow用户
提问于 2015-01-06 01:53:03
回答 2查看 19关注 0票数 0

我使用phpMyAdmin快速创建数据库,然后通过sql手动添加约束。当我查看sql转储文件时,它包含以下内容(来自mysqldump)。对我来说,同时拥有键和约束似乎是没有必要的。

键和约束是否重复?

代码语言:javascript
复制
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 */;
EN

回答 2

Stack Overflow用户

发布于 2015-01-06 02:00:13

是的,你可以在没有键的情况下拥有一个约束,所以如果你不想/不需要键,你可以安全地删除它们。

键和约束具有不同的用途。

编辑:实际上,让我改正一下。当您在InnoDb中添加约束时,它总是被自动索引,并显示为一个键(它们是同义词)。您在show create table中看到的只是创建的索引。

票数 0
EN

Stack Overflow用户

发布于 2015-01-06 02:06:52

它们不是多余的。如果你添加了一个没有键的外键,那么将会隐式地为你创建一个键,但我个人更喜欢显式地创建键,这样我就可以选择它的名称。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27785051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档