【Oracle】对一个已经拥有重复数据的表的列设置唯一性约束
对一个已经拥有重复数据的表的列设置唯一性约束
在这种情况下创建唯一性约束,可以发现会报错,通常为由于存在重复的键值,无法生效唯一性约束
最简单的方法,就是删除重复的记录,这样就可以按照正常流程,创建唯一性约束
但往往这些重复数据,有实际的业务意义,不能随便删除,或者因为业务部门不好好删除等原因导致数据没法删除
简言之,
如果约束设置enabled,则会检查新插入或更新的数据是否符合约束条件。
如果约束设置disabled,则表中可以包含,违反约束的记录。
如果约束设置validate,则表中存在的数据,必须符合约束。
如果约束设置novalidate,则表中存在的数据,不必符合约束。
validate和novalidate的行为,依赖于是否设置了enabled/disabled。
相应地可以设置组合,如下所示,
针对上面的需求,我们采用enable和novalidate的组合,是不是就可以解决问题了?
简单来说就是就不能创建唯一性索引,只能是普通索引,但使用enable novalidate组合,可以设置约束
换句话说,利用唯一性约束,限制数据唯一性,同时有相应的非唯一索引,达到相同效果
也就是在表中已存在重复的数据,此时若需要创建唯一性约束,可以按照“创建非唯一索引”-“创建唯一性约束”的顺序来实现
您能读到这儿,我呢是发自真心的感谢您,若要转载,还望请您带上链接