数据库干货 | 防止重复记录的发生

news/2024/4/29 13:33:52/文章来源:https://blog.csdn.net/weixin_53935287/article/details/126937611

许多数据库管理员(DBA)需要至少花费一段时间来尝试从数据库表中识别和删除重复记录。如果一开始多注意防止重复插入,那么识别和删除重复记录所花费的大部分时间都可以用于其他工作上。原则上,这并不难做到。但是,实际上,你可能甚至不知道有重复的行!今天的文章将会介绍一些策略,通过防止将重复记录插入数据库表中来减少重复记录的发生。

使用主键和唯一键索引

为确保表中的行是唯一的,必须限制一个或多个列以拒绝非唯一值。满足此要求,可以使用表的任何唯一标识符快速检索表中的任何行。我们可以通过在适用的字段中包含主键或主键索引来强制列的唯一性。

为了说明这一点,让我们看一个包含产品详细信息的表,例如名、系列、供应商、描述等。以下是它在 Navicat 表设计器中的样子:

Navicat 使用“键”标题下的钥匙图标指示作为键一部分的字段,并用数字表示其在组合键中的位置。带有数字 1 的单个钥匙图标告诉我们 productCode是表的唯一主键(PK)列。根据定义,主键必须是唯一的,并且不能包含 NULL 值。

同时,如果我们再看一下「索引」选项卡,它表明已为 productLine 列进行索引:

在许多情况下,单一列不足以使一行成为唯一,因此我们必须在主键中添加其他字段。以下是一个需要同时使用 customerNumber 和 checkNumber 作为唯一主键的 payments 表,因为同一位客户可以进行多次付款:

自动递增主键的缺点

许多数据库设计人员或开发人员(包括我自己!)喜欢使用数字自动递增主键,因为:

  • 易于使用。数据库会负责它们!
  • 因为每个新行都接收一个唯一的整数,所以冲突是不可能的。

以下就是一个这样的表:

在 Navicat 中,创建自动递增的主键所需要做的就是选择数字数据类型(例如整数)并勾选「动递增」框。数据库将会为该列生成所有值。

现在是坏消息,自动递增的主键对防止重复行几乎没有作用,特别是如果你不包含任何其他表索引。例如,假设表没有任何额外的索引。这就没有什么可以阻止某人插入与现有行具有完全相同的 first_name 和 last_name 的行。

实际上,我们现在可以检验该理论!在 Navicat 中,我们可以通过点击加号(+)按钮将新行直接插入到网格中:

正如预期的那样(害怕),重复的名已被接受!

总结

今天的故事值得注意的是,尽管有方法可以防止插入重复的行,但这并不一定意味着可以防止所有数据重复。至少,设计人员或开发人员必须采取其他预防措施,要么在数据库设计中采用严格的规范化,要么在应用程序级别执行特定的验证。

往期回顾

Navicat 被投毒了 | 真相来了!

Navicat 成为信通院数据库创新实验室成员

Navicat 学术伙伴计划 - 免费教育版申请

Navicat 技术智库 - 实战演练与各类热门问题解答

免费试用攻略 | Navciat 16 数据库管理工具

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_10303.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows环境下Hadoop的安装和配置

Windows环境下Hadoop的安装和配置Windows环境下Hadoop的安装和配置平台及版本安装 Java1.8,并配置环境变量安装Hadoop2.7.3Hadoop核心配置文件启动Hadoop服务Windows环境下Hadoop的安装和配置 平台及版本 Windows10JDK1.8.0_192Hadoop2.7.3 安装 Java1.8&#xf…

Java Math

本博客具体总结了java中的api Math中部分函数使用方法: 取绝对值 Modifier and TypeMethod and Descriptionstatic doubleabs(double a) 返回一个 double值的绝对值。static floatabs(float a) 返回一个 float值的绝对值。static intabs(int a) 返回一个值的绝对值…

卜算法学习笔记-02-分而治之算法02

数组中的逆序对计数 算法分析 所谓逆序对&#xff0c;是指数组中的两个元素 A[i]A[i]A[i] 和 A[j]A[j]A[j]&#xff0c;其下标 i<ji < ji<j&#xff0c;但是考察元素的值&#xff0c;却有 A[i]>A[j]A[i] > A[j]A[i]>A[j]。 输入&#xff1a;一个包含 nnn 个…

vue项目实战-完成路由组件的搭建

vue项目实战-完成路由组件的搭建 1.安装vue-router npm i vue-router --save分析结构可知&#xff0c;路由组件有四个&#xff1a;Home、Search、Login、Register 2.创建路由组件文件夹pages以及各路由组件 3.配置路由 项目中配置路由一般配置在router文件夹中&#xff0c;…

工业智能网关BL110应用之八十一: 实现西门子S7-400 PLC 接入亚马逊云平台

LAN 接口的配置COM口采集西门子S7-400 PLC的配置 工业智能网关BL110一共有一 个LAN 接口&#xff0c;一个WAN接口&#xff0c;可以通过LAN 接口采集数据&#xff0c;通过WAN接口接入局域网&#xff0c;设置过程不一样&#xff0c;WAN接口可以自动获取IP以及相关以太网设置。 …

硅光电子器件模拟:“RSoft光电器件设计仿真技术与应用”

RSoft光子器件工具包括业界最广泛的模拟器和优化器&#xff0c;一款非常优秀的设计仿真软件&#xff0c;能够帮助用户轻松的设计光学元件、纳米级光学结构&#xff0c;同时也可以模拟无源或有源的光电子器等。RSoft具有高度精确的算法能快速建立虚拟样机&#xff0c;同时降低了…

FPGA 20个例程篇:15.VGA显示八种颜色的彩条

第六章 图像显示处理&#xff0c;经典再现 15.VGA显示八种颜色的彩条 图像和视频处理可以说是FPGA中又一个经典地应用&#xff0c;使用FPGA做图像处理最核心的优势就在于&#xff1a;FPGA能进行实时流水线运算&#xff0c;从而达到更高的实时性&#xff0c;围绕着图像处理又有…

【VUE】process.env,require,vite.config.js等问题的解决

一、简介 这个系列是想将自己做过的Cesium项目整理回顾&#xff0c;同时也希望能给看到的文章的朋友一点帮助。大部分内容规划都是简单的功能应用&#xff0c;后面可能会选我自己感兴趣的功能做分享。 本文主要介绍工程的技术选型&#xff0c;环境搭建和代码的简单实现。首先…

Spring Security(一)- SpringSecurity 框架简介

文章目录一、SpringSecurity 框架简介1. 概要2. Spring Security 与 Shiro 对比2.1 Spring Security2.2 SpringSecurity特点2.3 Shiro2.4 Shiro特点2.5 小结3. SpringSecurity项目模块和依赖二、SpringSecurity 入门案例1. 添加相关依赖2. 运行项目3. 权限管理中的相关概念&…

大字节数组和 MemoryStream 的替代方案

发表于2019 年 12 月 9 日 在 .NET 中,处理二进制数据时通常使用字节数组;例如,在方法之间传递文件的内容、编码/解码文本、从套接字读取数据等。这些数组可能会变得非常大(最大为兆字节),OutOfMemoryException如果运行时无法运行,最终可能会导致被抛出分配足够大的内存…

redis数据结构基本语法

Redis Study 学到技巧 快捷键 ctrl [ typora很好用&#xff0c;有个问题就是换行会自动跟上面的格式&#xff0c;按删除键也无效 ctrl [就会把前面的格式给稀释掉。 经验 有关typora上传博客园图片缩放的问题,办法就是在typora中粘贴图片以后发现缩放没有效果&#xf…

Windows中使用SMB共享文件夹

SMB共享文件夹 简单步骤:打开【控制面板】 打开【启动或关闭windows功能】 打开【SMB1.0/CIFS 文件共享支持】 重启电脑 到磁盘中选择需要共享的文件夹 选中文件夹【属性】-> 【共享】->【共享】->添加【Everyone】用户 -> 权限【读取/写入】->确定共享 打开【…

那么我们应该如何优化Youtube的视频呢?

除了ins&#xff0c;Facebook&#xff0c;Twitter这类日常发帖分享型的社交网站外&#xff0c;还有其他的视频类网站也可以用于跨境电商的营销推广。作为视频类的社媒网站&#xff0c;YouTube可以说是全球第一大视频类社媒营销网站&#xff0c;在拓展视频内容的同时&#xff0c…

第3章 Kafka架构深入

3.1 Kafka工作流程及文件存储机制 Kafka中消息是以topic进行分类的&#xff0c;生产者生产消息&#xff0c;消费者消费消息&#xff0c;都是面向topic的。 topic是逻辑上的概念&#xff0c;而partition是物理上的概念&#xff0c;每个partition对应于一个log文件&#xff0c;该…

java线程池

目录 一、浅谈对线程池的理解 二、线程池常用类和接口 三、线程池的核心参数 四、线程池的状态 五、线程池的执行流程 六、常见的线程池 FixedThreadPool&#xff1a;线程数固定的线程池 CachedThreadPool&#xff1a;可缓存线程池&#xff0c;线程数根据任务动态调整的…

肯德尔(Kendall)相关系数概述及计算例

目录 1. 何谓相关&#xff08;correlation&#xff09;? 2. 肯德尔相关 3. 肯德尔相关的假设 4. 计算公式及代码示例 4.1 Tau-a 4.2 Tau-b 1. 何谓相关&#xff08;correlation&#xff09;? 相关是指一种双变量分析&#xff08;bi-variate analysis&#xff…

不知道数字化转型有什么意义?实现数字化转型价值都有哪些路径

近些年来&#xff0c;随着人工智能、云计算、大数据、物联网、区块链等新一代前沿技术的普及应用&#xff0c;社会的方方面面都有了信息化、数字化的身影&#xff0c;并通过相关技术、理念、应用创造了从未体验过的数字化社会&#xff0c;对整个社会形式进行了一次深层次的转型…

JVM原理及优化_垃圾回收器

文章目录JVM原理及调优_垃圾回收器什么是垃圾收集器&#xff1f;垃圾回收器详解SerialParNewParallel ScavengeSerial OldParallnel oldCMSG1JVM原理及调优_垃圾回收器 什么是垃圾收集器&#xff1f; 垃圾收集器是垃圾回收算法&#xff08;引用计数法、标记清除法、标记整理法…

PLM是什么?为什么要上PLM?有什么好处?

PLM是什么&#xff1f;或许早在五年前还有这个疑问&#xff0c;但如今已成为行业竞争的必需品。 PLM即对产品从创建、使用到最终报废&#xff0c;是一种对全生命周期产品数据信息进行管理的理念&#xff1b;是一种应用于在单一地点的企业内部、分散在多个地点的企业内部&#…

SpringBoot JavaBean对象拷贝 orika

前言: 日常开发中&#xff0c;经常会遇到将一个对象bean值复制到另一个bean,一般通过set方法一个一个属性写上去&#xff0c;比较麻烦。当然也有spring、apache的属性拷贝工具,这里介绍一下orika orika 是什么? Orika 是一个 Java Bean 映射框架&#xff0c;它可以递归地将数…