36 mysql 主键冲突 和 唯一索引冲突

news2024/11/24 8:49:52

前言

我们这里 来看一下 我们经常碰到的 "duplicate key xxx"

测试表结构如下 

CREATE TABLE `tz_test` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `field1` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  KEY `field1` (`field1`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=10000000 DEFAULT CHARSET=utf8

 

放入测试数据如下 

76a24ca29954418fa2da2a1ee04fd816.png

 

检查 tz_test 中主键索引 约束的地方

已经存在的记录 和待插入的记录 在目标 索引字段列表 一致, 然后 响应 true 表示存在重复的 id 

41b71167c20649a29b76101e3274df3c.png

 

然后 外层更新错误信息为 DUPLICATE_KEY

ac994e6a0466476db1efd402918e4105.png 

然后 外层 write_record 来校验错误信息, 如果是 DUPLICATE_KEY

05548ea0a8aa437988237cab47a36ccb.png 

然后输出 错误编码 以及 错误相关信息

0189c324b0ee45d4bbb8e73849086cda.png

 

 

唯一索引冲突 

更新建表语句如下 

CREATE TABLE `tz_test` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `field1` varchar(128) DEFAULT NULL,
  `field2` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `field1` (`field1`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8

 

测试数据如下 

51979572e8644a0ebf8edd2b6fee00cd.png

 

执行 sql 如下 “INSERT INTO `test`.`tz_test`(`id`, `field1`, `field2`) VALUES (11, 'field2', '2');”

迭代遍历 索引的地方, 这里首先是使用 id 进行冲突判断, 发现不冲突 

然后迭代到下一个索引 field1, 发现 field1 字段有唯一约束, 然后 冲突了, 然后 返回 DUPLICATE_KEY 错误码 

bf6c0c9bb13b4e8fac42ab5def40157c.png

 

field1 索引冲突匹配的地方如下 

f260edb746ee446782fac778be49fb7f.png 

 

多个字段的唯一索引冲突 

更新建表语句如下 

CREATE TABLE `tz_test` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `field1` varchar(128) DEFAULT NULL,
  `field2` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `field_1_2` (`field1`,`field2`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8

 

测试数据如下 

c54456ab17824b97a90da196ca1acad3.png

 

执行 sql 如下 “INSERT INTO `test`.`tz_test`(`id`, `field1`, `field2`) VALUES (11, 'field2', '2');”

在索引 field_1_2 中找到 一条记录 field1, field2 均相同, 然后出现 冲突

这里 响应 DUPLICATE_KEY

89afcc434a1542a4ad3cd33c37e24921.png

 

 

完 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

超声功率放大器使用范围有哪些

超声功率放大器是一种特殊的设备,用于放大超声波信号的功率级别。它在各种领域都有广泛的应用范围,下面将详细介绍超声功率放大器的使用范围。 医学影像领域: 在医学影像领域,超声功率放大器被广泛用于超声诊断设备。它们能够放大…

亲测一款超实用的在线制作产品册工具,一看就会

最近,我一直在寻找一款简单易用的在线制作产品册工具,终于让我找到了一个超实用的神器!这款工具不仅功能强大,而且操作简单,一看就会。 首先,这款工具提供了丰富的模板和素材,用户可以根据自己的…

【测试功能篇 01】Jmeter 压测接口最大并发量、吞吐量、TPS

压力测试,我们针对比较关键的接口,可以进行相应的压力测试,主要还是测试看看接口能抗住多少的请求数,TPS稳定在多少,也就是吞吐量多少 安装 Jmeter的安装很简单,官网下载地址 http://jmeter.apache.org/ &…

万字长文:从 C# 入门学会 RabbitMQ 消息队列编程

RabbitMQ 简介 RabbitMQ 是一个实现了 AMQP 协议的消息队列,AMQP 被定义为作为消息传递中间件的开放标准的应用层协议。它代表高级消息队列协议,具有消息定位、路由、队列、安全性和可靠性等特点。 目前社区上比较流行的消息队列有 kafka、ActiveMQ、Pul…

mac中安装Homebrew

1、Homebrew是什么? 软件安装管理工具 2、先检查电脑中是否已经安装了Homebrew 打开终端输入:brew 提示命令没有找到,说明电脑没有安装Homebrew 如果提示上述图片说明Homebrew已经安装成功 3、安装Homebrew 进入https://brew.sh/ 复制的命…

3.ubuntu20.04环境的ros搭建

ros搭建比较简单,主要步骤如下: 1.配置ros软件源: sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list 2.配置密钥 sudo apt-key adv --keyser…

01线性回归

目录 常规求解: 矩阵求解 sklean算法求解 # 二元一次方程 # x y 14 # 2x - y 10 常规求解: x np.array([[1,1],[2,-1]])print(x) # [[ 1 1] # [ 2 -1]]y np.array([14, 10])w np.linalg.solve(x, y)print(正常求救:)print(w) …

在Centos7.9_2207安装CDH6.3.2

在Centos7.9_2207安装CDH6.3.2 背景 笔者做大数据开发,实时部分一般要用到HBase、Kudu、Redis等组件来保证幂等性,为了方便,还是选用老古董CDH6.3.2【最后的免费版】做一个单节点机器,方便随时挂起。多节点虚拟机由之前的双路E5…

实践小记——C#科学计数法格式化输出

文章速览 示例默认输出,不设置小数精度设置尾数部分的小数精度 总结参考文章 坚持记录实属不易,希望友善多金的码友能够随手点一个赞。 共同创建氛围更加良好的开发者社区! 谢谢~ 示例 默认输出,不设置小数精度 private void Fo…

设计模式之桥接模式--连接抽象与实现(你想知道的问题都有)

目录 概述结构型设计模式桥接模式的定义桥接模式的角色和关系 版本迭代紧耦合版增加品牌两个品牌两款软件松耦合的设计版本迭代业务分析总结 问题升华抽象与实现抽象包含的一些方法或属性依赖于实现部分的接口关联关系与桥接模式桥接模式适合情况谁是实现,谁是抽象组…

vscode设置latex

vscode配置latex 1.安装vscode,并添加环境变量路径 2.安装latex,bin文件夹添加到环境变量路径 3.vscode安装插件 4.vscode->文件->首选项->显示配置内容->setting.json文件,查看其位置目录,通过我的电脑找到此文件(不要使用v…

torch - 张量Tensor常见的形式

1.Scalar 通常就是一个数值 x tensor(42.) 输出x: 2.Vector 特征向量 例如:[-5., 2., 0.]在深度学习中通常表示特征,如词向量特征,某一维度特征等 3.Matrix 一般计算的都是矩阵,通常都是多维的。 可以做矩阵的…

C# +.Net检验科信息管理系统源码 LIS系统源码

检验科信息管理系统(LIS) LIS系统集申请、采样、核收、计费、检验、审核、发布、质控、查询、耗材控制等检验科工作为一体的网络管理系统。它的开发和应用将加快检验科管理的统一化、网络化、标准化的进程。 主要包括以下功能: 1、数据采集…

【Python】集合与字典

按照输入顺序输出 将输入的名字去重,同时按照输入顺序输出 sinput().split(,) blist(set(s)) bsorted(b,keys.index) print(b) 删除集合元素、更新集合 根据操作删除更新集合 update括号里可以是一个集合,add只能是一个元素 discard用于删除元素&#x…

Fedora 项目近日发布了 Fedora Linux 39

导读几经推迟之后,Fedora 项目近日发布了 Fedora Linux 39,这是红帽公司赞助的面向大众的 GNU/Linux 发行版的最新稳定版本,采用了最新的技术和开源应用程序。 Fedora Linux 39 由 Linux 内核 6.5 支持,并提供了一些最新的桌面环境…

APP安全加固怎么做?加固技术、加固方法、加固方案

前面的文章中我们为大家介绍了移动应用安全检测的测试依据、测试方法、和测试内容,本文我们着重分享App安全加固的相关内容。 (安全检测内容) 通过前面的文章我们知道了app安全检测要去检测哪些内容,发现问题后我们如何去修复&am…

mfc140u.dll丢失的解决方法,以及针对每个解决mfc140u.dll丢失办法的优缺点

在使用电脑的过程中,有时会遇到一些与动态链接库文件(DLL)相关的错误。其中,mfc140u.dll丢失是一种常见的问题,它可能导致应用程序无法正常运行。在本文中,我们将探讨关于mfc140u.dll丢失的解决办法&#x…

1.数字化转型概述

中台数字化转型的问题 在中台数字化转型过程中,如何进行业务领域边界划分,如何完成中台领域建模实现能力复用,如何完成单体应用拆分利微服务设计,如何实现前中后台的协同设计; DDD解决的问题 DDD首先从业务领域人手&#xff0c…

linux网络编程之TCP协议编程

Linux网络编程之TCP协议编程 tcp协议编程模型socket函数sockaddr_inbindlistenconnect 应用服务端代码客服端代码 TCP协议编程) tcp协议编程模型 Server 1.创建socket (socket函数) 2.确定服务器协议地址簇 (struct sockaddr) 3.绑定 (bind) 4.监听 ( listen) 5.接受客户端连接…

人脸识别4G执法记录仪、一体化智能AI布控球在智慧社区、智能网格中的应用

智慧社区守护者:人脸识别与智能监控技术的融合创新 随着城市的飞速发展和科技的不断进步,智慧社区和智能网格的概念已经成为现代城市管理的一个重要趋势。在这一过程中,人脸识别技术、4G执法记录仪以及一体化智能AI布控球等智能监控设备&…