首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL replace命令,不建议使用。

    MySQL replace操作导致主从自增主键不一致 今天在线上遇到一个问题,是由于replace语法导致的主从自增主键不一致问题,这里我模拟了一下,问题能够稳定复现。...2、AUTO_INCREMENT的值代表下一个插入表的记录的默认id,但是我们的从库里已经存在id=4的记录 02 原因分析 其实产生这个问题的本质原因,是MySQL将这个replace语句的...*/; 在这个实验的过程中,我分别测试了MySQL8.0版本和MySQL5.7版本,发现MySQL8.0的版本,虽然binlog内容一致,但是更新了AUTO_INCREMENT的值。...这个现象,可以理解为MySQL 5.7 版本的一个bug。 03 潜在影响 可能你会想,如果主库此时利用replace操作插入一个不冲突的新的数据记录,这个从库的自增值不就又同步了么。...1、升级MySQL版本到8.0版本。 2、业务侧杜绝replace这种非标准SQL语法,利用业务逻辑来判断数据冲突。 3、检测自增ID不一致,配置对应监控,第一时间发现问题,并解决问题。

    2.9K20

    MySQL replace into导致的自增id问题

    // MySQL replace into导致的自增id问题 // 今天线上遇到一个问题,挺有意思,这里记录一下希望对大家有所帮助。...我们知道,在MySQL中,是支持replace语法的,当你执行replace into的时候,如果该条记录存在,那么replace会删除这条记录,然后重新insert一条新记录。...3 | 3 | +----+------+ 2 rows in set (0.00 sec) mysql >>replace into test1 values (6,3); Query OK,...*/; 可以看到,MySQL将replace into的在binlog中保存的格式是update语句,那么update语句本质上不会对自增值进行修改,所以就导致了主从的表自增id不一致,这样虽然看着没有什么问题...replace into是MySQL的特有语法,建议不要在线上使用,使用delete和insert来代替比较好。

    8.4K20

    Mysql中REPLACE INTO详解及和INSERT INTO的区别

    官方地址: MySQL :: MySQL 8.0 Reference Manual :: 15.2.12 REPLACE Statement 1....总结 下面,我用表格来总结下使用 REPLACE INTO时可能会遇到的不同情况 ⭐无主键无唯一索引 场景 REPLACE INTO 是相当于 REPLACE INTO 在 binlog 中的表现形式...REPLACE INTO 三种使用方式 value1,value2 均为模拟的表的属性名 REPLACE INTO 表名(value1, value2, ...) values(...); REPLACE...这种用法并不强制要求列名匹配,事实上,MYSQL 甚至不关心SELECT返回的列名,它需要的是列的位置。...当然,on duplicate key update为 Mysql 特有语法并且最好在单线程下操作。不然多线程下INSERT经常会导致锁表的情况发生,也是个小坑。在使用这些技术的时候,我们需要多加注意

    45810

    分析replace into

    1. replace into的三种形式 mysql的replace into有三种形式: replace into ... values ......replace into ... select (valueA, valueB, ...) / (from table tbl)都成立 replace into tbl_name set colA=valueA...2. replace into的行为 开门见山地说,replace into做的事情是: 在没有唯一键/主键重复时,replace into所做的事情就是新添加一个/多个row,row各个属性的值与运行的语句内容有关...这种用法并不一定要求列名匹配,事实上,MYSQL甚至不关心select返回的列名,它需要的是列的位置。...另外,对于那些没有给予值的列,MySQL 将自动为这些列赋上默认值。 4. 举例: 我们以第三种语法set为例,分别去理解replace into和set的行为。这样举一反三,就能理解另外两种形式。

    2.4K70
    领券