美文网首页工作生活
Oracle 数据库表中已有重复数据添加唯一键(唯一约束)

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

作者: 和女朋友一起开发的游戏 | 来源:发表于2019-07-04 13:36 被阅读0次

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

问题描述

以 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 数据库表中已有重复数据添加唯一键(唯一约束)

    数据库表中已有重复数据添加唯一键(唯一约束) 问题描述 以 demo 举例,模拟真实场景。 表 TEST_TABL...

  • DM7表中有重复数据处理办法

    问题描述:如何删除数据库中的重复数据问题原因:某些时候,数据库中需要添加新的唯一性约束,但是数据库中已经存在了重复...

  • MySQL基础 - MySQL查询、事务、ACID特性

    -- 创建SRS数据库 -- 切换到SRS数据库 -- 创建学院表 -- 添加唯一约束 -- 创建学生表 -- 添...

  • mysql数据库遇到的问题

    1,添加主键:SQL PRIMARY KEY 约束PRIMARY KEY 约束唯一标识数据库表中的每条记录。主键必...

  • MySql 中的约束

    MySql 中的约束 作用:给表添加约束值,从而约束用户操作数据库的行为 数据库常见的约束值如下: 默认值约束(d...

  • Oracle约束

    什么是约束?约束是Oracle提供的自动保持数据库完整性的一种方法,它通过限制字段中数据、记录中数据和表之间的数据...

  • ORACLE数据库删除UNI唯一约束

    在oracle数据库中操作时,我发现表的唯一约束UNI不能通过视图模式直接删除。 通过查询资料发现可以用下面的方法...

  • Python 高级 14(3)数据库约束

    数据库常用约束、增加删除约束、数据库导入导出、数据表设计思想-三大范式 2.4.8 添加约束 约束是一种限制,它通...

  • UNIQUE ,PRIMARY KEY

    GO ON----(SQL高级) SQL UNIQUE 约束 UNIQUE 约束唯一标识数据库表中的每条记录。 U...

  • 定义

    作用:保证用户输入的数据保存到数据库中是正确的。 确保数据的完整性 = 在创建表时给表中添加约束

网友评论

    本文标题:Oracle 数据库表中已有重复数据添加唯一键(唯一约束)

    本文链接:https://www.haomeiwen.com/subject/nbwlhctx.html