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

测试环境:

MySQL版本:MySQL 5.7.19

复制模式:ROW

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

执行下面操作:

##测试脚本:CREATE TABLET_AUTO_TEST

(

IDINT AUTO_INCREMENT PRIMARY KEY,

C1INT NOT NULL,UNIQUE KEYUNI_C1(C1)

)INSERT INTO T_AUTO_TEST(ID,C1)VALUES(99,99);REPLACE INTO T_AUTO_TEST(ID,C1)VALUES(101,99);

##在主库上和从库上查看该表当前自增值:SELECTTABLE_SCHEMA,TABLE_NAME,AUTO_INCREMENTFROMinformation_schema.tablesWHERE table_name='T_AUTO_TEST';

##发现主库上自增值为102,而从库上为100,当主从发生切换后,正常插入数据:INSERT INTO T_AUTO_TEST(C1)VALUES(103);INSERT INTO T_AUTO_TEST(C1)VALUES(104);

发生报错:

ERROR 1062 (23000): Duplicate entry '101' for key 'PRIMARY'

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

原因分析:

1、在MySQL中,只有INSERT语句才能导致表的自增ID发生变化,

2、在主库上执行REPLACE INTO时,由于唯一索引列上存在数据冲突,先删除重复数据再插入新数据,插入操作导致主库上表的自增初始值发生变化。

3、步骤2操作在主库上执行提交后,按照数据更新情况,BINLOG中会生成UPDATE类型的日志,UPDATE操作并不触发从库上自增初始值发生变化。

4、主从发生变化后,从库的自增值从100开始增加,当增加到102时,当前表中已存在102的记录,因此报主键重复。

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

总结:

1、REPLACE INTO属于MySQL特有语法,在使用过程中,应避免REPLACE时对自增列进行数据更新。

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

mysql 自增id replace_MySQL--REPLACE INTO与自增相关推荐

  1. SQL 2008 使用insert into 语句时自增ID插入数据时实现自增ID

    SQL 2008 使用insert into 语句时自增ID插入数据时实现自增ID 建立一张User表 使用insert into 语句插入一行新的数据 结果如下

  2. mysql自增id存在哪里_mysql返回自增id

    在mysql操作中执行insert,是没有自增id返回的,这就对于后续编写逻辑造成了很大不便. 其实有几种方法可以做到insert后直接获取到自增id. 1.执行select max(id); 原理是 ...

  3. mysql generatedkey_Mybatis使用generatedKey在插入数据时返回自增id始终为1,自增id实际返回到原对象当中的问题排查...

    今天在使用数据库的时候,遇到一个场景,即在插入数据完成后需要返回此数据对应的自增主键id,但是在使用Mybatis中的generatedKey且确认各项配置均正确无误的情况下,每次插入成功后,返回的都 ...

  4. MySQL 使用自增ID主键和UUID 作为主键的优劣比較具体过程(从百万到千万表记录測试)...

    測试缘由 一个开发同事做了一个框架.里面主键是uuid.我跟他建议说mysql不要用uuid用自增主键,自增主键效率高,他说不一定高,我说innodb的索引特性导致了自增id做主键是效率最好的,为了拿 ...

  5. MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(从百万到千万表记录测试)...

    Reference: https://blog.csdn.net/mchdba/article/details/52336203 一个开发同事做了一个框架,里面主键是uuid,我跟他建议说mysql不 ...

  6. 有关于mysql自增型需要返回id_关于mysql自增id,你需要知道的

    关于mysql自增id,你需要知道的,主键,重启,索引,类型,字段 关于mysql自增id,你需要知道的 易采站长站,站长之家为您整理了关于mysql自增id,你需要知道的的相关内容. 导读:在使用M ...

  7. MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(500W单表)

    测试缘由 一个开发同事做了一个框架,里面主键是uuid,我跟他建议说mysql不要用uuid用自增主键,自增主键效率高,他说不一定高,我说innodb的索引特性导致了自增id做主键是效率最好的,为了说 ...

  8. Mysql自增id理解

    MySQL自增ID 1. 什么是自增id 自增ID是在设计表时如果将id字段的值设置为自增的形式也就是AUTO_INCREMENT,那么当插入一行数据时就无需指定id,数据表会根据前一个id值+1进行 ...

  9. 分布式ID-数据库自增ID

    第一种方案仍然还是基于数据库的自增ID,需要单独使用一个数据库实例,在这个实例中新建一个单独的表: 表结构如下: CREATE DATABASE `SEQID`;CREATE TABLE SEQID. ...

  10. 关于自增id 你可能还不知道

    导读:在使用MySQL建表时,我们通常会创建一个自增字段(AUTO_INCREMENT),并以此字段作为主键.本篇文章将以问答的形式讲述关于自增id的一切. 注: 本文所讲的都是基于Innodb存储引 ...

最新文章

  1. 北京电影学院发了一篇满是数学公式的计算机顶会论文,并开源了其代码(附链接)...
  2. 微前端之qiankun
  3. SAP Spartacus 基于行项目的订单取消功能(order cancel)实现
  4. 【BIM入门实战】建筑墙体知识全攻略
  5. access month函数用法_学会了这7个EXCEL日期函数技巧,老板再让你加班,你找我!...
  6. 阿里java架构师面试128题含答案:分布式架构+Dubbo+多线程+Redis
  7. 8种常见SQL错误用法,你犯过几个?
  8. 浅入浅出 MySQL 索引
  9. WCF分布式开发常见错误(17):无法启动MSMQ服务
  10. 学写网站(二)前端配置之glup
  11. Semantic Nets
  12. java.lang.NoClassDefFoundError:org.ksoap2.seri...
  13. 令人惊艳的NanoPC-T4(RK3399)作为工作站的初始配置和相关应用
  14. 7-6 536 判定子串
  15. win10 tensorflow-gpu1.4 rtx2060 安装详细教程 fater-rcnn
  16. STC用PCA测量脉宽_超快激光脉冲测量和诊断使用自相关仪
  17. 计算机论文字数要求吗,2016年夏季学期计算机(软件)学院学年论文字数、页数及格式要求.doc...
  18. 临时文件传输工具推荐
  19. 一座适合躺尸的低房价、慢节奏小城
  20. Neat Video Pro插件如何在Flame 2020中使用

热门文章

  1. Elasticsearch5中安装Elasticsearch-head插件
  2. linux系统命令:yum和apt-get
  3. ubuntu zip解压
  4. mysql 其他引擎
  5. ChildWindow在Open时旋转出现
  6. 计算机网络(十四)-CSMA/CD协议
  7. 计算机网络(八)-数据链路层-帧封装
  8. Linux下启动程序常见问题,linux系统启动流程及常见故障解决方式
  9. mybatis insert 重复数据2条_Mybatis框架lt;增gt;:添加一条数据到数据库中,insert...
  10. centos jupyter 安装_centos7安装 jupyter