对一个已经拥有重复数据的表的列设置唯一性约束

在这种情况下创建唯一性约束,可以发现会报错,通常为由于存在重复的键值,无法生效唯一性约束

最简单的方法,就是删除重复的记录,这样就可以按照正常流程,创建唯一性约束

但往往这些重复数据,有实际的业务意义,不能随便删除,或者因为业务部门不好好删除等原因导致数据没法删除

简言之,

如果约束设置enabled,则会检查新插入或更新的数据是否符合约束条件。

如果约束设置disabled,则表中可以包含,违反约束的记录。

如果约束设置validate,则表中存在的数据,必须符合约束。

如果约束设置novalidate,则表中存在的数据,不必符合约束。

validate和novalidate的行为,依赖于是否设置了enabled/disabled。

相应地可以设置组合,如下所示,

针对上面的需求,我们采用enable和novalidate的组合,是不是就可以解决问题了?

简单来说就是就不能创建唯一性索引,只能是普通索引,但使用enable novalidate组合,可以设置约束

换句话说,利用唯一性约束,限制数据唯一性,同时有相应的非唯一索引,达到相同效果

也就是在表中已存在重复的数据,此时若需要创建唯一性约束,可以按照“创建非唯一索引”-“创建唯一性约束”的顺序来实现

参考:表中已存重复数据的情况,如何增加唯一性约束?-腾讯云开发者社区-腾讯云 (tencent.com)

【Oracle】对一个已经拥有重复数据的表的列设置唯一性约束的更多相关文章

  1. mysql删除多个重复数据,多个字段添加唯一性索引

    需求:删除station_id.ab_data_time.item_code_id.data_cycle.ab_value 字段重复的记录 #查询重复的数据 select b.id,b.station ...

  2. Oracle中主键、外键、索引、序列、唯一性约束的创建

    1.主键的创建 方法一:直接在sql语句中声明字段主键约束 create table table_name (id type[length] constraint pk_name primary ke ...

  3. Oracle根据连续性日期的重复数据取最大或最小值日期

    原始数据: 结果数据: 对比两个图,要是不处理连续性中的重复值,我们直接可以用LEAD函数了事,但处理出来的结果貌似多余. 我的思路是先将原始数据中连续性日期有重复值的处理好,即选择最小的一个,比如2 ...

  4. oracle查询一个时间段每天的数据量

    1.需求: 从所有数据中,查出一个时间段中每天的数据量,即:按日做汇总. 2.SQL语句模板: select trunc(date_col) date, sum(num_col) num, count ...

  5. oracle 按某个字段查询重复数据

    /* 手机号为重复的会员,获取其最大会员id,对应的会员信息 */ SELECT * FROM MEMBER a WHERE a.member_id IN ( SELECT MAX(member_id ...

  6. Oracle表明明存在SQL查询数据提示表不存在异常

    今天同事遇到一个很奇怪的问题,恢复了一个数据库,表明明存在,用PLSQL和sqlplus都试过了,SQL语句select * from 表名,查询数据,却提示表名不存在异常 然而,使用select * ...

  7. Oracle 查看一个数据库实例下面所有的表大小

    1. 因为 oracle有一些 lob字段 在user_extents 里面取出来的结果不是表名, 所以需要与user_lobs 表做关联查询才可以 本来想通过 关联查询来实现, 发现字表查询更简单 ...

  8. oracle去除重复数据与oracle分页

    一.去除oracle中重复数据,可以使用rowid列,rowid列是一个伪列,该列在数据库中灭一个表中都有,但是我们查询数据库的时候,默认都没有给我们返回这一列,这一列用来区分数据库中的每一行时间,可 ...

  9. MySQL数据库根据一个或多个字段查询重复数据

    系统在开发测试过程中出现bug,比如并发操作没有处理好,数据库中往往会插入重复数据,这些脏数据经常会导致各种问题.bug可以修改,但是数据往往也要处理,处理SQL如下: 1.根据一个字段查找重复数据 ...

  10. ROWID面试题-删除表中重复数据(重复数据保留一个)

    /* ROWID是行ID,通过它一定可以定位到r任意一行的数据记录 ROWID DNAME DEPTNO LOC ------------------ ------------------------ ...

随机推荐

  1. 一次对requirements环境的配置

    事情是这样的,我需要跑通一个代码,因此要配置环境,但是并不能利用requirements中给的指令直接配置,于是开始找一些其他的解决方法.作为一名小白,总是绕很多弯路. 记下一些蜿蜒. 首先,摘录re ...

  2. 获取Android设备系统apk

    前提条件是:电脑adb连接Android设备 打开命令好窗口,输入指令adb shell "dumpsys window|grep mCurrentFocus" 输入指令adb s ...

  3. 【atcoder abc281_d】动态规划

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * @ ...

  4. 关于Android studio无法勾选SDK的问题

    这是我遇到的问题,相信也是大多数人遇到的问题,我的经历是之前下载过一次Android studio,用过一段时间后虚拟机出问题了,一直连不上,我都是用手机代替运行,发现太麻烦了,还是决定重新一遍,于是 ...

  5. 实时渲染大赛结果将于3月31日晚8点B站直播公布,敬请期待!

    根据评选标准,经过评委组层层选拔,首届实时渲染3D动画创作大赛,最终获奖结果出炉啦! 本次赛事报名人数达212人,入围作品共40份,其中Omniverse组11份,专业组15份,学生组14份. 我们将 ...

  6. 记录--Js基础练习题目

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1.使用js,在页面中打印以下图案 提示: document.write可以在页面中打印内容<br>在html中代表换行, 在 ...

  7. JSON格式化 动态生成表格 表格转置 行列转换 Excel导出 行求和 列求和

    不需要行求和.列求和的查看 JSON格式化 动态生成表格 表格转置 行列转换 Excel导出 接上篇,新增行求和.列求和 完整代码如下: <!DOCTYPE html PUBLIC " ...

  8. Vue子组件向父组件传值(this.$emit()方法)

    子组件使用this.$emit()向父组件传值 首先必须在父组件中引用子组件,然后实现传值 第一步在父组件中引入子组件 import UnitByPurchaseAddOrUpdate from '@ ...

  9. 【已解决】(MySQL)SQL注入绕过登陆验证直接登陆---用户名输入框注释sql密码语句段

    今天学习了一种sql注入方法,通过注释密码验证部分的sql语句. 这是登陆界面 在用户名如果输入 15284206891' and 1=1 # 密码可以随意输入即可登陆成功 原理如下: 在sql可视化 ...

  10. .NET Core WebApi 多语言本地化,动态切换多语言

    .NET Core WebApi 多语言本地化,动态切换多语言 原生的.net core webapi 动态多语言本地话 具体更多详细内容,可以参考官方文档 首先看效果图 整体项目结构图 开始前需要讲 ...