我创建了一个使用Hibernate ORM的Java应用程序,通过Hibernate工具,我获得了一个自动脚本,该脚本从用作实体的Java对象安装或升级DB模式。
该程序在MySQL中工作正常,但是对于Oracle,当在一列中声明约束"unique“并且在尝试定义索引之后会触发错误。Oracle表示,默认情况下,“唯一”约束会创建一个索引,因此不能在同一列上声明两个索引,
因此,我的问题是,在MySQL中,唯一约束和一个索引之间是否存在等价或关系。
请澄清。在进阶时谢谢。
发布于 2010-11-29 23:08:51
unique约束需要索引才能强制执行。当您将列声明为unique时,两个DBMS都会创建适当的索引。唯一的区别是,Oracle可以防止您创建冗余索引,而MySQL则不能:
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 | |
+------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+发布于 2010-11-29 23:07:10
MySQL就是不关心无用的索引。对于更新,它将检查所有唯一索引;对于SELECTs,它将选择一个任意索引。
因此,要使Oracle满意,请在创建唯一索引之前删除该索引。
https://stackoverflow.com/questions/4304920
复制相似问题