MySQL--更新自增列的潜在风险
2024-09-17 04:46:08
##=====================================================================##
测试环境:
MySQL版本:MySQL 5.7.19
复制模式:ROW
##=====================================================================##
执行下面语句:
## 创建测试表
DROP TABLE T_001;
CREATE TABLE `T_001` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`C1` int(11) NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `UNI_C1` (`C1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; ##插入记录
INSERT INTO T_001(C1)VALUES(1); ##更新ID列
UPDATE T_001
SET ID=2,
C1=2
WHERE C1=1; ##插入新记录
INSERT INTO T_001(C1)VALUES(3);
执行报错:
ERROR 1062 (23000): Duplicate entry '2' for key 'PRIMARY'
##=====================================================================##
原因分析:
1、第一次INSERT语句,获得自增值为1。
2、UPDATE操作完成,将表中数据的ID列修改为2,但UPDATE操作不会触发表的自增起始值发生变化。
3、第二次INSERT语句,获得自增值为2,由于表中已存在ID=2的记录,因此插入失败,报主键重复。
##=====================================================================##
总结:
1、对于自增列,其自增值与业务无关,应避免对自增列数据进行更新操作,避免出现异常。
##=====================================================================##
最新文章
- [LeetCode] Count Primes 质数的个数
- 通读SDWebImage③--gif和webP的支持、不同格式图片的处理、方向处理
- 【手把手教你Maven】构建过程
- android adb命令
- 两个div叠加触发事件发生闪烁问题
- C#资源释放
- 使用开关、分段控件和web视图
- Xamarin for Mac 2.0.2.35 稳定版 破解补丁 Preview 2
- 在内部架设NuGet服务器
- ssh公钥自动登陆
- Android ADT安装时卡在Calculating requirements and dependencies
- 用saxon框架对xml数据进行过滤 - 程序员的天堂 - ITeye技术网站
- ::在c++中什么意思
- 3分钟搞掂Set集合
- Bugku-CTF之flag在index里
- [easyUI] datagrid 数据格 可以进行分页
- CentOS+Nginx+PHP 前端部署
- Java基础 --Unix与Mac系统 文件路径分隔符(一)
- nth-child与nth-of-type区别
- MVC的部分视图(Partial View)
热门文章
- Error starting Tomcat context. Exception: org.springframework.beans.factory.BeanCreationException
- 查看linux是否为虚拟机,以及其它信息,cpu,主机型号,主板型号等
- Vue 中使用 viewerjs进行本地上传预览图片
- 安装和使用JD-Eclipse插件
- Java 字符编码(二)Java 中的编解码
- Go的并发调度原理
- 基于百词斩和扇贝单词的背单词APP软件测试
- thinkpadE系列重装系统:u盘启动
- flume1.4.0源码结构剖析
- 《Linux就该这么学》第十五天课程