Oracle 数据库表中已有重复数据添加唯一键(唯一约束)

问题描述

以 demo 举例,模拟真实场景。

表 TEST_TABLE 有如下字段和数据:id 是主键,code 没有设置键和索引

ID CODE
1 code1
2 code2
3 code2
4 code2
5 code3

通过以上表中数据可以看出 code 是有重复数据的,此时如果我们直接添加唯一键,会报错。

通过 PL/SQL 可视化操作,或者通过 SQL 语句添加(ENABLE NOVALIDATE 的作用是约束新增数据但不会验证已有数据):ALTER TABLE TEST_TABLE ADD CONSTRAINT UK_TEST_TABLE_CODE UNIQUE(CODE) ENABLE NOVALIDATE;

即使用到了 ENABLE NOVALIDATE 也报错,如下:

ORA-02299: cannot validate(TESTUSER.TEST_TABLE.UK_TEST_TABLE_CODE)-duplicate keys found

--Create/Recreate primary, unique and foreign key constraints alter table TEST_TABLE and constraint UK_TEST_TABLE_CODE unique(CODE) novalidate

解决方案

  1. 先添加普通索引

    • CREATE INDEX IDX_TEST_TABLE_CODE ON TEST_TABLE(CODE);
  2. 再添加唯一键
    • ALTER TABLE TEST_TABLE ADD CONSTRAINT UK_TEST_TABLE_CODE UNIQUE(CODE) ENABLE NOVALIDATE;

如果你对上面提到的基本概念不太清楚,建议继续往下看,或者查找资料去学习,然后多在测试数据库中模拟“犯罪现场”,然后进行还原问题、找问题、分析问题和解决问题。

基本概念

键、索引、约束的区别

一般,我们看到术语“索引”和“键”交换使用,但实际上这两个是不同的。索引是存储在数据库中的一个物理结构,键纯粹是一个逻辑概念。键代表创建来实施业务规则的完整性约束。索引和键的混淆通常是由于数据库使用索引来实施完整性约束。

  1. 主键索引和主键有什么关系?

主键索引是创建主键的时候系统自动创建的索引,主键要求不重复,不为空,但是他如何判断有效率呢?当然是建索引了,老是全表遍历还不疯掉。

所以建立主键会自动的建立主键索引。

  1. 主键和唯一键的区别在于唯一键可以为空,主键不可以

  2. 建立唯一约束和唯一索引又什么区别?

同理,建立唯一约束的时候,也会自动的创建唯一索引。建立唯一索引可以说是唯一约束的一种手段。

基本上,实现起来是没有什么区别的。如果实在理解不了,就当一样好了。

  1. 聚簇索引和非聚簇索引有何区别?

这个上边已经讲和很详细了,还附有两篇文章,这里就不说了。

  1. 约束和主键有什么区别?

约束一般有主键约束,外键约束,唯一约束等。

分别为primary key,foreign key,unique 其中主键约束只是约束的一种。

其实他们是不同概念的东西。

参考资料

Oracle 数据库表中已有重复数据添加唯一键(唯一约束)的更多相关文章

  1. 删除oracle表中的完全重复数据

    今天数据库除了个问题:项目中的一张表,数据是从另外一个系统中相同的表里弄过来的,但是可能由于昨天同事导数据导致我这张表中的数据出现了完全相同的情况(所有字段),全部是两条,需要删除相同的数据. 做法: ...

  2. oracle数据库表中,插入数据的时候如何产生一个 字母+数字 编号?

    Oracle 语句中“||”代表什么啊? oracle数据库表中,插入数据的时候如何产生一个 字母+数字 编号? 排序的话,用order by来处理即可.比如:cola123a234b999b335s ...

  3. 在oracle数据库表中没有添加rowid字段为什么会出现?

    rowid 是 oracle 数据库表中的伪列, rowid 首先是一种数据类型,它唯一标识一条记录物理位置, 基于64位编码的18个字符显示.因为 rowid 是伪列, 所以并未真的存储在表中,但可 ...

  4. Sql server的Merge语句,源表中如果有重复数据会导致执行报错

    用过sql server的Merge语句的开发人员都应该很清楚Merge用来做表数据的插入/更新是非常方便的,但是其中有一个问题值得关注,那就是Merge语句中的源表中不能出现重复的数据,我们举例来说 ...

  5. 针对Oracle数据库表中的数据的常见操作

    1.查询表中所有数据 select * from 表名; 例:select * from stu; 2.查询的同时修改表中数据 select * from 表名  for update; 例:sele ...

  6. 使用sqlldr命令导入资料到Oracle数据库表中的示例说明

    CSV: Comma-Separated Values(逗号分隔值)的缩写,是以逗号分隔字段的多行文本文件   sqlldr 是sql*loader的缩写,此工具在安装完整版的Oracle客户端后就有 ...

  7. 【MySQL】测试MySQL表中安全删除重复数据只保留一条的相关方法

    第二篇文章测试说明 开发测试中,难免会存在一些重复行数据,因此常常会造成一些测试异常. 下面简单测试mysql表删除重复数据行的相关操作. 主要通过一下三个大标题来测试说明: 02.尝试删除dept_ ...

  8. FlowPortal-BPM——功能:判断数据库表中字段是否重复并阻止提交或保存

    一.JS添加代码,判断是否有OnSubmit事件 文件位置:YZSoft/Forms/src/Validator.js //=====判断是否有OnSubmit事件===== if (typeof ( ...

  9. [置顶] oracle 数据库表中转换成java代码

    --数据库中字段java代码 select col.TABLE_NAME,replace(initcap(col.TABLE_NAME),'_', '')   , 'private '||decode ...

随机推荐

  1. c# 守护进程,WPF程序自守护

    原文:c# 守护进程,WPF程序自守护 版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/lwwl12/article/details/79035246 如何 ...

  2. [转]完美解决)Tomcat启动提示At least one JAR was scanned for TLDs yet contained no TLDs

    一.文章前言    本文是亲测有效解决At least one JAR was scanned for TLDs yet contained no TLDs问题,绝对不是为了积分随便粘贴复制然后压根都 ...

  3. 存储过程和输出分辨率表菜单JSON格式字符串

    表的结构,如以下: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo] ...

  4. 四大天王变形金刚(SqlHelper)

      1.的基础上推出   SqlHelper是一个基于·NET Framework的数据库操作组件.组件中包括数据库操作方法.SqlHelper用于简化你反复的去写那些数据库连接(SqlConnect ...

  5. 正确 zip 压缩和解压码

    网上流传zip压缩和解压缩 该代码有一个非常大的问题 尽管使用了ant压缩和解压缩.但任务流或使用java.util.zip 的方式来写,我在压缩的文件夹结构中所使用的过程遇到是不正确,即使是不同的文 ...

  6. WPF之动态换肤

    原文:WPF之动态换肤 如何实现换肤呢,对于复杂的换肤操作,如,更换按钮样式.窗口样式等,我们需要写多个资源字典来表示不同的皮肤,通过动态加载不同的资源字典来实现换肤的效果:对于简单的换肤操作,如更改 ...

  7. UWP中的消息提示框(二)

    在UWP中的消息提示框(一)中介绍了一些常见的需要用户主动去干涉的一些消息提示框,接下来打算聊聊不需要用户主动去干涉的一些消息提示框.效果就是像双击退出的那种提示框. 先说说比较简单的吧,通过系统To ...

  8. Win10的UWP之进度条

    原文:Win10的UWP之进度条 关于UWP的进度条的处理的方案有两种方案 我们新建一个项目,然后处理的界面如下的代码 <Grid.RowDefinitions> <RowDefin ...

  9. Android卡片设置透明度失效问题

    最近在做蓝牙电话项目,需要支持双路通话,涉及到通话卡片透明度调节,当正在通话中,有新的来电时,原来的通话卡片需要做成30%的透明度,本来很简单的一个小改进,但通过 setAlpha()接口总是失效!  ...

  10. VS2010使用c++、gSOAP创建WebService 图文教程

    VS2010使用c++.gSOAP创建的WebService 图文教程 环境 操作系统:Windows 7gsoap版本:2.8.32C++编译器/开发环境:Visual Studio 2010 gS ...