mysql 自增id replace_MySQL--REPLACE INTO与自增

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

测试环境:

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时对自增列进行数据更新。

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

f714972a218bffb6ca2ac3b5ca173f74.png

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

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

相关文章

JAVAWEB入门之Servlet_体系结构

我们建的这个类要继承复写Servlet的所有方法,但是这会很麻烦,所有的写出来很繁琐当摆设,所以我们想,可不可以定义一个类,然后继承这些类和方法, Servlet的体系结构, Servlet----接口----爷爷 …

JAVA入门级教学之HTTP

HTTP概念:Hyper Text Transfer Protocol 超文本传输协议 传输协议:定义了客户端和服务器端通信时发送数据的格式 特点:1.基于TCP/IP的高级协议,要经过三次握手,说明也是一种安全的协议 2.默认端口号是80 http://…

mysql 取年月日 语句_MySQL学习从这里出发!

MySQL数据库开发学习中,想满足一些需求,无疑需要经常与数据打交道,例如,我们在使用IO的一些技术的时候,常常需要将一些数据存储到外部文件,可能大家会问,我们初学的时候常常会简单的保存一些数据…

JAVAWEB入门之Requset原理

Request 1.request和respinse对象的原理 request和respinse对象是由服务器创建的,我们只是使用他们 request对象是来获取请求消息,response是来设置响应消息 3.request对象的继承体系结构: ServletRequest-------接口 继承 HttpServlet…

mysql事务编号_Mysql事务

一:mysql事务1.需求从orders表中查询最新的销售订单编号,并使用下一个销售订单编号作为新的销售订单编号。在指定客户的orders表中插入新的销售订单。将新的销售订单项目插入orderdetails表中。从orders表和orderdetails中获取数据以确认更改。如果由于数…

java try catch 例子_java try catch

try catch机制非常好。那些觉得try catch不行的人,是他们自己的水平有问题,无法理解这种机制。并且这群人写代码不遵守规则,喜欢偷懒,这才造成try catch不好的错觉。详细解释:1.程序要健壮,必须要设计报错机…

java xss 默认值_一台 Java 服务器可以跑多少个线程?

原标题:一台 Java 服务器可以跑多少个线程?转自:简书,作者:新栋BOOK一台Java服务器能跑多少个线程?这个问题来自一次线上报警如下图,超过了我们的配置阈值。京东自研UMP监控分析打出jstack文件&…

java设计模式初探之装饰者_JAVA设计模式初探之装饰者模式

装饰者模式1、意图: 动态地给一个对象添加一些额外的职责。就增加功能来说, Decorator模式相比生成子类更为灵活。该模式以对客 户端透明的方式扩展对象的功能。2、适用环境(1)在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责…

redis在java中的方法_redis在java中的使用方法

Redis是key-value方式储存数据的内存数据库。下载后解压,redis-server.exe是redis服务,启动之后就可以使用redis。redis-cli.exe是客户端,可以访问本地或远程的redis。redis-cli.exe -h 127.0.0.1 -p 6379 命令行命令。修改-h后的ip…

Java写一个快速排序_快速排序java实现

1.快速排序的思想快速排序属于交换排序,是冒泡排序的升降版。相对于冒泡排序而言,快速排序增大了记录比较和移动的距离,将关键字较大的记录直接移动到后面,将关键字较小的记录直接移动到前面;不再是相邻两个记录依次进…

java porm.xml_通过Maven仓库安装Spire.PDF for Java

本文将介绍如何通过Maven仓库安装Spire.PDF for Java。首先,在pom.xml文件中配置Maven仓库路径。com.e-icebluee-icebluehttp://repo.e-iceblue.com/nexus/content/groups/public/其次,在pom.xml文件中指定Spire.PDF for Java的Maven依赖e-iceblue spire…

JAVA入门级教学之(方法内存分配机制)

目录 JAVA入门级教学之(方法内存分配机制) 1.方法只定义,不调用,是不会执行的 2.在JVM内存划分上有这样三块主要的内存空间:【还有其它的内存空间】 3.关于"栈"数据结构 4.方法代码片段存在哪里?…

cad与连接mySQL数据库_跨服务器操作数据库?其实很简单!(下)

之前一篇文章一步一步的教小伙伴们如何建立SQL Server的数据库链接(DBLINK),详细步骤可查看上篇:跨服务器操作数据库?其实很简单!(上)今天我们来教大家如何连接MYSQL和Oracle的远程数据库创建MYSQL远程链接第一步需要下载MYSQL驱动…

php如何获取服务器时间_php如何获取当前日期

1、前提条件php网站编程中,我们一般用date函数来获取服务器上的时间。但要想正确调用date函数,必须保证php的配置文件php.ini已经配置正确了,否则调用date函数时会报错,没办法正确进行获取时间。2、用记事本程序打开php配置文件ph…

JAVA入门级教学之(对象的创建和使用)

/* 对象的创建和使用*/ public class OOTest01 {public static void main(String[] args){//通过一个类可是实例化N个对象//实例化对象的语法:new.类名();//new是java语言中的一个运算符//new运算符的作用是创建对象,在JVM【堆】内存中开辟新的内存…

JAVA入门级教学之(对象的使用)

//定义一个用户类public class User {//属性【以下都是成员变量之实例变量】//用户编号//int是一种【基本数据】类型:整数型//no是一个实例变量int no;//用户名//String是一种引用数据类型:代表字符串//name是一个实例变量//name是一个引用String name;/…

台式电脑耳机插孔在哪_一图教你学会电脑主机后面各接口正确接线

电脑主机后面接口众多,很多人分不清各接口都分别起什么作用和怎么接线,下面就来重点说说经常易出错的各接口作用及连接方法。1、 键盘鼠标接口:注意紫色的圆形接口为键盘接口,绿色的圆形接口为鼠标接口。如果你的键盘是紫色的圆形…

软件加入使用时间_你有了抢口罩软件,电商也进行了升级,我们又有了新软件(3月2日更新)...

超神office新鲜一手办公、软件教程你有了抢口罩软件,电商也进行了升级,我们又有了新软件(3月2日更新)”昨天的软件,作者又迎来了更新,功能增加,具体表现还需要各位评测。01新软件介绍一、软件界面秒抢助手内测版&#…

JAVA入门级教学之(内存引用的例子)

先定义一个地址类 public class Address {//地址String addr; } 内存引用的例子 public class OOTest03 { public static void main(String[] args){//u是引用//u是局部变量User unew User();//上一个版本编写//u.addrnew Address();//可以通过前章内存示意图看出其中的原…

小米10开始抓取日志怎么关闭_除了*#*#6485#*#*,小米手机还有这些神秘暗号

最近在小米社区(xiaomi.cn)平台,一条快速查看手机电池信息的代码,居然成了大家广泛关注和讨论的焦点,甚至很多米粉也晒出了自己的界面截图,同时关于电池使用寿命和损耗的问题也被频频提及。而除了这条代码之外,小米手机…