问题描述

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

例子

CREATE INDEX IDX_T_MES_EMPLOYEEINFO_CODE ON T_MES_EMPLOYEEINFO(JOB_NO);ALTER TABLE T_MES_EMPLOYEEINFO ADD CONSTRAINT UK_T_MES_EMPLOYEEINFO_CODE UNIQUE(JOB_NO) ENABLE NOVALIDATE;
CREATE INDEX IDX_BASE_WORK_SHOP_CODE ON BASE_WORK_SHOP(CODE);ALTER TABLE BASE_WORK_SHOP ADD CONSTRAINT UK_BASE_WORK_SHOP_CODE UNIQUE(CODE) ENABLE NOVALIDATE;

基本概念

键、索引、约束的区别

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. oracle数据库表excel文件位置,Excel数据导入到oracle数据库表方法

    最近工作中碰到excel文件数据导入oracle数据库表中的技术问题.以前未处理过,决定利用这次机会,好好研究研究. 可先建一临时表,字段和要导入的Excel表的列一致 运行以下SQL语句,使临时表可 ...

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

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

  3. Oracle数据库表中字段顺序的修改方法

    Oracle数据库表中字段顺序的修改方法 这篇文章主要给大家介绍了关于Oracle数据库表中字段顺序的修改方法,在介绍修改的方法之前先给大家介绍了Oracle数据库表新建字段的方法,文中通过示例代码介 ...

  4. oracle 表字段顺序_如何更改Oracle数据库表中字段顺序

    软件安装:装机软件必备包 SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言.在使用它时,只需要发出& ...

  5. Oracle数据库----表中数据的操作(插入、更新、删除数据)

    文章目录 一.插入数据 插入多行数据的简单方法: 1.将表一的全部数据添加到表二中 创建副本Courses1,只复制Courses的结构 将Courses表中的数据拷贝到Courses1中 创建副本的 ...

  6. oracle 重复的记录数,如何确定Oracle数据库表中重复的记录

    作为一个Oracle数据库开发者或者DBA,在实际工作中经常会遇到这样的问题:试图对库表中的某一列或几列创建唯一索引时,系统提示ORA-01452:不能创建唯一索引,发现重复记录. 下面我们以表cod ...

  7. oracle删除表中数据_Excel工作表中,删除重复数据的2种方法解读,高效且实用!...

    在实际的工作中,经常要对工作表中重复的数据进行删除,如若数据行只有几条,则可通过人工查找出来,如若数据行较多,这种方法就费时费力,而且容易出错,造成对表格数据的准确性和个人能力的怀疑--今天,小编给大 ...

  8. mysql删除完全重复数据库_MySQL中删除完全重复数据的准确SQL语句

    案例: id姓名课程名称分数1张三数学692李四数学893张三数学69删除除了自动编号不同,其他都相同的学生冗余信息 ----------------------------------------- ...

  9. 怎么解锁oracle数据库表,Oracle数据库表解锁语句

    --表解锁 select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked_ ...

最新文章

  1. 服务容错保护断路器Hystrix之二:Hystrix工作流程解析
  2. Kubernetes — Pod
  3. 编程格式注意事项---后期慢慢补充
  4. tensorflow学习(4.loss函数以及正则化的使用 )
  5. 中国农业大学计算机研究生分数线,中国农业大学2017年硕士研究生招生考试复试分数线...
  6. JQuery radio(单选按钮)操作方法汇总
  7. 第一篇:Entity Framework 简介
  8. centos6.5 安装 kong 网关
  9. mysql c2_Mysql具有C2级安全性
  10. java spring mvc json ajax 优势_SpringMVC后台json数据前台ajax获取不到!!!急求解答!!!...
  11. 日常问题——hadoop 任务运行到running job就卡住了 INFO mapreduce.Job: Running job: job_1595222530661_0003
  12. SqlServer中 Partition By 的使用
  13. 前端笔记之Vue(五)TodoList实战拆分store跨域练习代理跨域
  14. 安居客头部导航栏的编写
  15. WordPress主题制作全过程(八):制作index.php
  16. 字体下面有背景颜色css,CSS 颜色 字体 背景 文本 边框 列表 display属性
  17. 这有10款好玩游戏,游戏迷速来围观
  18. 应用程序无法正常启动0xc000007b win7
  19. MT2014——打靶
  20. 2018-2019赛季多校联合新生训练赛第七场补题和题解(中石油)

热门文章

  1. 两化融合给企业带来的实际意义
  2. 虚拟运营商APN、SPN参数、Sim卡名称
  3. 软件测试分类-按照开发阶段划分
  4. MIUI黑科技之小米直达服务:Web 般的流畅体验+更少的卡顿、延迟
  5. 音乐研发必备:理解 MIDI 协议与标准 MIDI 文件格式
  6. There were errors checking the update sites: SSLHandshakeException: sun.secu 202007亲测有用
  7. R语言绘图—Veen(韦恩图)
  8. cuda编程环境搭建
  9. IIR数字滤波器设计(数字信号处理)
  10. xampp 下载地址