【oracle】清除重复项后再设定主键
假设有这样一张没有事先设定主键的表:
create table test( id number(12) )
这样给它填充数据:
insert into test(id) values (1); insert into test(id) values (2); insert into test(id) values (2); insert into test(id) values (3); insert into test(id) values (4); insert into test(id) values (5); insert into test(id) values (6);
现在test表的id字段就有重复记录了,它现在就可以当作模拟环境了。
现在想给id字段设置为主键,但明显其中值存在重复项,设置主键Oracle不会允许。
因此我们需要先确认有没有重复项:
SQL> select id from test group by id having count(id)>1; ID ---------- 2
运行结果告诉我们,id为2的行有两条。
SQL> select rowid,id from test where id=2; ROWID ID ------------------ ---------- AAASvQAAHAAACb8AAB 2 AAASvQAAHAAACb8AAC 2
利用rowid,我们可以删去一条。
SQL> delete from test where rowid=(select max(rowid) from test where id=2); 已删除 1 行。
这里是删去一条,因为只有一条重复的,如果是多条就该只保留rowid最大的一条,上面的语句就该改成:
delete from test where rowid!=(select max(rowid) from test where id=2);
好了,既然删去了重复的记录,我们可以设置主键了。
SQL> alter table test add constraint pk_test primary key(id); 表已更改。
END
分类:
Oracle.约束
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2020-01-29 [Oracle/sql]查看当前用户名下有多少表 以及查看表字段信息
2020-01-29 [oracle/Sql]怎样比较两表的差异?
2015-01-29 【Canvas与艺术】红色凯尔特结
2015-01-29 Java环境变量设置
2015-01-29 Win7安装软件,界面上中文显示乱码的解决方案
2014-01-29 【Canvas技法】勾画十二齿斜齿齿轮轮廓
2014-01-29 【Java与排列组合】某年高考选择题:1,3,5,7,9中选两个,0,2,4,6,8中选两个,组成的无重复四位数有几个?