我创建了一个使用Hibernate ORM的Java应用程序,使用Hibernate工具我得到一个自动脚本,用于从用作实体的Java对象安装或升级数据库模式。
该程序在MySQL中正常工作,但是对于Oracle,当在一列中声明约束“unique”并且在尝试定义索引之后触发错误。 Oracle表示默认情况下“唯一”约束会创建一个索引,因此无法声明同一列上的两个索引,
所以,我的问题是,如果在MySQL中,唯一约束和一个索引之间存在等价或关系。
请澄清。提前致谢。
答案 0 :(得分:0)
MySQL只是不关心无用的索引。对于更新,它将检查所有唯一索引,对于SELECT,它将选择任意索引。
因此,为了让Oracle满意,请在创建唯一索引之前删除索引。
答案 1 :(得分:0)
唯一约束需要索引才能强制执行。当您将列声明为唯一时,两个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 | |
+------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+