首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:唯一和索引等价

MySQL:唯一和索引等价
EN

Stack Overflow用户
提问于 2010-11-29 22:59:34
回答 2查看 227关注 0票数 2

我创建了一个使用Hibernate ORM的Java应用程序,通过Hibernate工具,我获得了一个自动脚本,该脚本从用作实体的Java对象安装或升级DB模式。

该程序在MySQL中工作正常,但是对于Oracle,当在一列中声明约束"unique“并且在尝试定义索引之后会触发错误。Oracle表示,默认情况下,“唯一”约束会创建一个索引,因此不能在同一列上声明两个索引,

因此,我的问题是,在MySQL中,唯一约束和一个索引之间是否存在等价或关系。

请澄清。在进阶时谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-29 23:08:51

unique约束需要索引才能强制执行。当您将列声明为unique时,两个DBMS都会创建适当的索引。唯一的区别是,Oracle可以防止您创建冗余索引,而MySQL则不能:

代码语言:javascript
复制
show index from test_table;

+------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table      | Non_unique | Key_name   | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| test_table |          0 | PRIMARY    |            1 | id          | A         |           0 |     NULL | NULL   |      | BTREE      |         |
| test_table |          0 | foo_unique |            1 | foo         | A         |           0 |     NULL | NULL   |      | BTREE      |         |
| test_table |          1 | foo_key    |            1 | foo         | A         |           0 |     NULL | NULL   |      | BTREE      |         |
+------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
票数 0
EN

Stack Overflow用户

发布于 2010-11-29 23:07:10

MySQL就是不关心无用的索引。对于更新,它将检查所有唯一索引;对于SELECTs,它将选择一个任意索引。

因此,要使Oracle满意,请在创建唯一索引之前删除该索引。

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

https://stackoverflow.com/questions/4304920

复制
相关文章

相似问题

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