MySQL--更新自增列的潜在风险
##=====================================================================##
测试环境:
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、对于自增列,其自增值与业务无关,应避免对自增列数据进行更新操作,避免出现异常。
##=====================================================================##

MySQL--更新自增列的潜在风险的更多相关文章
- 怎么重置mysql的自增列AUTO_INCREMENT初时值
重置 MySQL 自增列 AUTO_INCREMENT 初时值 注意, 使用以下任意方法都会将现有数据删除. 方法一: delete from tb1; ALTER TABLE tbl AUTO_IN ...
- MySQL--REPLACE INTO更新自增列值引发的异常
##=====================================================================##测试环境:MySQL版本:MySQL 5.7.19复制 ...
- mysql更新某一列数据
UPDATE 表名 SET 字段名 = REPLACE(替换前的字段值, '替换前关键字', '替换后关键字'); select * from province; +----+------------ ...
- MySQL使用AUTO_INCREMENT列的表注意事项之update自增列篇
1)对于MyISAM表,如果用UPDATE更新自增列,如果列值与已有的值重复,则会出错:如果大于已有的最大值,则会自动更新表的AUTO_INCREMENT,操作是安全的. (2)对于innodb表,u ...
- mysql自增列导致主键重复问题分析。。。
前几天开发童鞋反馈一个利用load data infile命令导入数据主键冲突的问题,分析后确定这个问题可能是mysql的一个bug,这里提出来给大家分享下.以免以后有童鞋遇到类似问题百思不得其解,难 ...
- (转)mysql自增列导致主键重复问题分析
mysql自增列导致主键重复问题分析... 原文:http://www.cnblogs.com/cchust/p/3914935.html 前几天开发童鞋反馈一个利用load data infile ...
- mysql 清空或删除表数据后,控制表自增列值的方法
http://blog.sina.com.cn/s/blog_68431a3b0100y04v.html 方法1: truncate table 你的表名 //这样不但将数据全部删除,而且重新定位自增 ...
- mysql 深度解析auto-increment自增列"Duliplicate key"问题
转载自:https://cloud.tencent.com/developer/article/1367681 问题描述 近期,线上有个重要Mysql客户的表在从5.6升级到5.7后master上插入 ...
- MySQL自增列(AUTO_INCREMENT)相关知识点总结
MySQL的自增列(AUTO_INCREMENT)和其它数据库的自增列对比,有很多特性和不同点(甚至不同存储引擎.不同版本也有一些不同的特性),让人感觉有点稍微复杂.下面我们从一些测试开始,来认识 ...
随机推荐
- python的os模块fnmatch模块介绍
一.先介绍一下os模块 import os print(os.getcwd()) # E:\python\test\python_models # 获取当前的目录 print(os.listdir(& ...
- VS2015自定义工具栏,往工具栏上添加按钮
工具--自定义--命令
- php使用redis的GEO地理信息类型
redis3.2中增中了对GEO类型的支持,该类型存储经纬度,提供了经纬设置,查询,范围查询,距离查询,经纬度hash等操作. <?php $redis = new Redis(); $redi ...
- break 和continue在循环中起到的作用
break语句的作用是终止当前循环,跳出循环体.主意,break只能跳出一层循环. continue语句的作用是终止本轮循环并开始下一轮循环,(这里要主意的是在开始下一轮循环之前,会先测试循环条件). ...
- (C#)日志接口请求响应时间
日志接口响应时间,记录接口请求信息,响应结果以及响应时间等.可以清楚的分析和了解接口状态. 如果一个一个地在接口下面做日志,那不是我们想要的结果.所以,我们选择做一个特性来控制接口要不要记录请求响应日 ...
- hbase-多租户
namespace 不同表在不同的namespace,可以做用户的权限控制 资源限制 限制每时间段请求的数量和大小 设置表的空间大小 修改hbase-site.xml文件 添加两个配置 hbase.q ...
- BZOJ1270或洛谷1107 [BJWC2008]雷涛的小猫
BZOJ原题链接 洛谷原题链接 \(DP\)水题. 定义\(f[i][j]\)表示小猫在高度\(i\),位于第\(j\)棵树时最多能吃到的柿子的数量.分为直接往下跳和跳到另一棵树两个决策. 那么很容易 ...
- Python之路(第三十八篇) 并发编程:进程同步锁/互斥锁、信号量、事件、队列、生产者消费者模型
一.进程锁(同步锁/互斥锁) 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理. 例 ...
- 【转】【完全开源】微信客户端.NET版
[转][完全开源]微信客户端.NET版 目录 说明 功能 原理步骤 一些参考 说明 前两天比较闲,研究了一下web版微信.因为之前看过一篇博客讲微信web协议的,后来尝试分析了一下,半途中发现其实没什 ...
- T-4-java核心API-集合类
一.集合 用于存储类型一致的一组对象的数据结构. 类似于数组,但是集合提供了操作算法:集合=数据存储+操作算法.集合的用途极其广泛,如歌曲列表,联系人列表对话记录等. 集合比数组多了操作算法,便于提高 ...