欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > 数据库 >内容正文

数据库

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

发布时间:2024/7/23 数据库 54 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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时对自增列进行数据更新。

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

总结

以上是生活随笔为你收集整理的mysql 自增id replace_MySQL--REPLACE INTO与自增的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。