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

##=====================================================================##

转载于:https://www.cnblogs.com/TeyGao/p/10033763.html

MySQL--更新自增列的潜在风险相关推荐

  1. mysql 自增列坏处_MySQL--更新自增列的潜在风险

    ##=====================================================================## 测试环境: MySQL版本:MySQL 5.7.19 ...

  2. mysql 重置自增长_怎么重置mysql的自增列AUTO_INCREMENT初时值

    重置 MySQL 自增列 AUTO_INCREMENT 初时值 注意, 使用以下任意方法都会将现有数据删除. 方法一: delete from tb1; ALTER TABLE tbl AUTO_IN ...

  3. 修改mysql中自增列的起始值

    语句如下: alter table 表名 AUTO_INCREMENT = 这里写起始值; 例如:给user表的自增列字段设置起始值为20000 alter table user AUTO_INCRE ...

  4. 设置mysql中自增列的初始值和增加步长

    1.设置 (1)设置起始值 SET auto_increment_offset = n; n就是起始值 (2)设置步长 SET auto_increment_increment = m; m就是步长. ...

  5. mysql 清空或删除表数据后,控制表自增列值的方法

    http://blog.sina.com.cn/s/blog_68431a3b0100y04v.html 方法1: truncate table 你的表名 //这样不但将数据全部删除,而且重新定位自增 ...

  6. mysql 如何搜索自增列_mysql 如何搜索自增列

    mysql搜索自增列的方法:1.使用[select max(id) from tablename]:2.使用[SELECT LAST_INSERT_ID()]:3.使用[select @@IDENTI ...

  7. mysql insert 自增_MySQL自增列插入0值的解决方案

    在将数据库从MSSQL迁移到MySQL的过程中,基于业务逻辑的要求,需要在MySQL的自增列插入0值.在MSSQL中是这样完成的: string sql;sql = " set identi ...

  8. mysql数据迁移到teradata_Mysql迁移到达梦数据库-Mysql到DM的应用迁移-给自增列赋值-GroupBy语法不兼容...

    现象描述 把基于Mysql 的应用移植到达梦数据库,我们进程碰到下面两个问题. 场景一: 在完成了数据和应用系统的移植后,应用一启动,看到日志框框报错:无法给自增列赋值. [仅当指定列列表,且 SET ...

  9. mysql 自增列 类型_MySQL--自增列学习

    ##=====================================================================================## 在数据库表设计中会纠 ...

最新文章

  1. 腾讯云 短信服务 【学习记录 】
  2. 清华校友陈怡然、杨越组队进军AI芯片市场,成立苹芯科技,最新Pre-A轮斩获近千万美元...
  3. linux shell Bad substitution
  4. 弹框位置设置html,JQuery弹出框定位实现方法
  5. oracle undo seg,正确切换undo
  6. Markdown的常用使用语法
  7. linux下用iperf测试步骤,网络性能测试工具Iperf详细使用图文教程
  8. 互联网日报 | 腾讯地图全国上线聚合打车服务;国庆档首日票房突破7亿;特斯拉国产Model3再降价...
  9. 电影院票务管理系统数据库设计
  10. 接触mybatisplus单页500条限制_单页网站制作教程,单页网站设计五大技巧
  11. C#编译报错:名称必须是命名空间名
  12. ubuntu 下如何调节显卡风扇转速?
  13. 如何使用ABP开发一
  14. 1078 加油站加油
  15. [异常]kvm虚拟机卡顿连接不稳定
  16. Android初试--了解和认识Android
  17. QGraphicsView通过鼠标操作来绘制图元
  18. 程序员应该怎么学数学?
  19. 基于YOLO的人脸检测和人脸计数(课程设计)
  20. 2018年中国居民收入与GDP增速基本同步

热门文章

  1. 【Matlab】矩阵三角分解法求解方程组
  2. lenovo Think Centre TCM 开发环境搭建
  3. BZOJ1911:[Apio2010]特别行动队——题解
  4. Linux下配置tomcat+apr+native应对高并发
  5. 《大众创业做电商——淘宝与微店 开店 运营 推广 一册通》一一1.3 选择创业的行业...
  6. 【LeetCode】405 Convert a Number to Hexadecimal (java实现)
  7. 打造基于大并发通信技术及大数据技术的O2O系统
  8. 第一个java程序(hdu 1001)
  9. 使用Capistrano向EC2部署Django代码--关于SSH相关的配置
  10. Android studio2.3.1 更新以后Error:Failed to open zip file. Gradle's dependency cache may be corrupt