oracle添加唯一约束,历史数据重复
作者: 葛屹肃 | 日期: 2021-10-30 | 分类: 个人杂谈
今天想为oracle中一个表单添加唯一约束,SQL都整理好了,结果执行时,弹出如下的提示,意思是表中有数据重复,不能添加唯一约束,遇到历史数据重复时,该如何处理呢?
当遇到要添加唯一约束的字段历史数据重复时,别无他法,只能先将重复处理好,再添加唯一约束。大家可按如下步骤处理。
步骤一:查询出重复数据
oracle查询重复数据的方法挺多的,最简单就是使用group by
例子:
select bar from
(
select count(bar) as a,bar from table1 group by bar
) where a > 1
)
步骤二:修改重复的数据
查询出重复数据后,然后就去重了,如果不能删除数据的话,就将数据修改下,以下SQL是修改重复数据最大id的的记录,如果重复有2条以上,要执行多次才能,当然,每次执行时,前缀(X1-)要改变,如第二次执行改为X2-
例子:
UPDATE table1 SET bar=’X1-’||bar
WHERE id IN
(
select max(id) from
(
select id,bar from
(
select count(bar) as a,bar from table1 group by bar
) where a > 1
)
) group by bar
)
步骤三:添加唯一约束
当通过上述2步处理好历史数据重复后,就可以添加唯一约束了
例子:
ALTER TABLE table1 –表名
ADD CONSTRAINT BAR_ONLY_CODE_CONS –约束名
UNIQUE (bar); –字段
好了,通过上述3步后,我们的目标已经达到,为table1添加了唯一约束,以后执行insert时,如果bar字段数据重复,将会出现异常,从数据库层面杜绝了bar出现重复数据。
文章链接:https://www.geyisu.com/2234.html