首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL replace into导致自增id问题

// MySQL replace into导致自增id问题 // 今天线上遇到一个问题,挺有意思,这里记录一下希望对大家有所帮助。...某个表中,只有一条记录,发生高可用切换之后,自增id值发生了变化,主从自增id值不一致,导致数据写入报主键冲突错误。...我们知道,在MySQL中,是支持replace语法,当你执行replace into时候,如果该条记录存在,那么replace会删除这条记录,然后重新insert一条新记录。...*/; 可以看到,MySQL将replace into在binlog中保存格式是update语句,那么update语句本质上不会对自增值进行修改,所以就导致了主从表自增id不一致,这样虽然看着没有什么问题...,从库自增id比主库小,当主从发生切换时候,这个问题就比较严重了,有些数据写入时候,就会报错了。

6.9K20
您找到你想要的搜索结果了吗?
是的
没有找到

MySQL 自增ID几个小问题

下面这几个小问题都是基于 InnoDB 存储引擎。 1. ID最大记录删除后,新插入记录ID是什么 例如当前表中有ID为1,2,3三条记录,把3删除,新插入记录ID从哪儿开始?...=4 DEFAULT CHARSET=latin1 自增ID为4,删除ID最大记录并不影响自增ID值。...MySQL 重启后自增ID从哪儿开始 例如当前表中有ID为1,2,3三条记录,把3删除,重启MySQL,新插入记录ID从哪儿开始? 很多人会认为从4开始,实际是从3开始。...因为InnoDB自增值是记录在内存,不是记录在数据文件。 重启后,会把 当前最大ID + 1 作为起始值。...删除最大ID值对自增ID值没有影响,但MySQL重启之后有影响,不会使用之前自增ID值,而是使用最大ID+1,因为自增ID值是存在内存中,重启后需要重新计算。 自增ID用完后就不变了。

7.8K21

mysql mediumtext 最大_mysql – TINYTEXT,TEXT,MEDIUMTEXT和LONGTEXT最大存储大小

大家好,又见面了,我是你们朋友全栈君。...上升到@ Ankan-Zerob挑战,这是我对每个文本类型中可以存储最大长度估计: Type | Bytes | English words | Multi-byte words ———–+———...字间空间必须有一个额外字符,所以我从每个字5.8个字节向下舍入。 具有许多重音语言,例如波兰语,可以存储略少单词,例如 德语用较长单词。...需要多字节字符语言,如希腊语,阿拉伯语,希伯来语,印地语,泰语等,通常需要UTF-8中每个字符两个字节。 每个单词5个字母疯狂地猜测,我从每个单词11个字节向下舍入。...CJK剧本(汉字,汉字,平假名,片假名等)我一无所知; 我相信字符大多需要UTF-8中3个字节,并且(大量简化)它们可能被认为每个字使用大约2个字符,因此它们将介于其他两个字符之间。

2K10

关于mysql自增id获取和重置

转载请注明出处:帘卷西风专栏(http://blog.csdn.net/ljxfblog) ---- mysql获取自增id几种方法 使用max函数:select max(id) from tablename...缺点:获取不是真正自增id,是表中最大Id,如果有删除数据的话,那么该值和自增id相差比较大。如果有连表数据,有可能导致数据错乱。...使用mysql查询函数:SHOW TABLE STATUS; 优点:能够准确查到自增id。而且可以在语句后面加上where语句或者like语句来过滤。...---- mysql自增id重置 使用truncate:truncate table; 说明:使用truncate会删除表数据释放空间,并且重置字自增id,但不会删除表定义。...适用于大量删除后修改新标识,但不能比当前表中最大值小。 使用修改表方法:alter table tablename auto_increment=new 说明:此方法和上面的二方法类似。

11.4K20

技术分享 | 关于 MySQL 自增 ID 事儿

当我们使用 MySQL 进行数据存储时,一般会为一张表设置一个自增主键,当有数据行插入时,该主键字段则会根据步长与偏移量增长(默认每次+1)。...自增值并不是保存在表结构信息内,对于不同版本它们有如下区别: 1.1.1 MySQL 8.0版本之前(重启后可能会产生变化): 计数器值存储在内存中,重启后丢弃,下一次将读取最大一个自增ID...https://dev.mysql.com/doc/refman/5.7/en/innodb-auto-increment-handling.html#innodb-auto-increment-initialization...1.1.2 MySQL 8.0版本(重启后保持不变): 计数器值将会持久化到磁盘。...不一定,业务也不应该过分依赖 MySQL 自增 ID 连续性,在以下三种情况下,并不能保证自增 ID 连续性: 1.5.1 插入时其他唯一索引冲突 假设已存在数据{1,张三},且张三所属字段设置了唯一主键

3K10

重置MySQL数据库评论ID

前言 先说说为什么要重设评论ID,因为早之前写了很多关于“评论”相关模块,如 Gravatar v1.3、Guest_url v1.0、Guest_Comment_url Hacks 1.0 等等,测试评论时占用了很多...{id},导致评论数据统计不正确(删除之后{id}空缺),还有一些“垃圾评论” 虽然删除了,但还是占用了{id}。...正文 对于 MySQL 评论 ID,一般是自增长主键,如果需要重设评论 ID,可以通过以下几步实现: 首先备份数据库:在进行任何数据库操作之前,务必备份数据库,以防意外发生。...登录 MySQL 数据库:使用相应 MySQL 客户端工具登录到数据库服务器。 执行 SQL 语句:通过 SQL 语句来重设评论 ID。...:= @count + 1; ALTER TABLE `_comments` AUTO_INCREMENT = 1; 这样会将评论 ID 重新从 1 开始自增,并按照原有记录顺序重新分配新评论 ID

6010

MySQL中分库分表之后,ID主键处理

MySQL中分库分表之后,ID主键处理 在大规模应用系统中,为了应对数据量增长和提高系统可扩展性,通常会采用数据库分库分表方案。...然而,在进行分库分表后,原本在单一数据库中自增ID主键就会面临新问题。因为拆分后多个库或表分别自增ID,可能导致ID冲突或者无法保证全局唯一性。...其中,时间戳部分可以保证ID有序性,数据中心ID和工作机器ID可以用于区分不同节点,序列号可以用于解决同一毫秒内并发生成。...在每个分片中,使用数据库自增ID来生成主键。 使用数据库自增ID和分片ID方案相对简单,但需要保证分片ID正确性和一致性,并且需要在查询时考虑分片路由。...总结 在MySQL分库分表方案中,ID主键处理是一个重要问题。本文介绍了几种常见处理方案,包括使用全局唯一ID、分布式唯一ID生成算法和结合数据库自增ID和分片ID

50010

mysql数据库中int类型最大值_mysql自增主键最大

大家好,又见面了,我是你们朋友全栈君。 1、mysql中int(11)中11代表显示宽度 整数列显示宽度,与mysql需要用多少个字符来显示该列数值,与该整数需要存储空间大小都没有关系。...a、int是整型,(11)是指显示字符宽度,最大为255。 b、int(11)是记录行数id,插入10条记录,那么它就显示00000000001 ~~~00000000010。...c、当字符位数超过11,它也只显示11位。 d、如果没有加未满11位就前面加0参数,就不会在前面加0。 e、如果没有给它指定显示宽度,MySQL会为它指定一个默认值。...f、INT(3)会占用4个字节存储空间,并且允许最大值也不会是999,而是INT整型所允许最大值。...2、mysql有五种整型数据列类型,即TINYINT,SMALLINT,MEDIUMINT,INT和BIGINT。 a、区别是取值范围不同,存储空间不相同。

5.9K20

MySQL表自增id溢出故障复盘

问题:MySQL某个表自增id溢出导致某业务block 背景:     tokudb引擎一个大表tb1,存放业务上机审日志,每天有大量写入, 并且由于历史原因,这张表是int signed 类型...,最大只能存 2147483647行记录 。...只需要下面几步: use logdb; select max(id) from tb1;   -- 记录下当前最大id为 xxxx create table tb2 LIKE tb1;   -- 创建影子表...alter table tb2 modify column id  bigint unsigned not null auto_increment ;   -- 修改新表为bigint unsigned...后续优化措施:     增加对自增id监控, 见这里 https://blog.51cto.com/lee90/2427912     整理些生产上可能遇到突发问题,并正对性制定相关应急预案

4.8K20

线上MySQL自增id用尽怎么办?

MySQL自增id都定义了初始值,然后不断加步长。虽然自然数没有上限,但定义了表示这个数字节长度,计算机存储就有上限。...Xid在MySQL内部是如何生成呢?...MySQL内部维护了一个全局变量global_query_id 每次执行语句时,将它赋值给query_id,然后给该变量+1: 若当前语句是该事务执行第一条语句,则MySQL还会同时把query_id...,第二个字段trx_mysql_thread_id就是线程id。...因为MySQL使用了一个唯一数组 给新线程分配thread_id逻辑: 总结 每种自增id有各自应用场景,在达到上限后表现也不同: 表自增id达到上限后,再申请时它值就不会改变,进而导致继续插入数据时报主键冲突错误

3.2K10

MySQL 主键 自增 ID 会用完吗?

MySQL 主键 自增 ID 会用完吗?...首先我们一般创建 MySQL 数据表时候,大部分情况下会创建一个自增主键ID 字段,可能你建表语句如下: CREATE TABLE IF NOT EXISTS `tb`( `id` INT...,那么我们去看下 他长度限制是多少 打开 MYSQL 官方网站,我们看下 INT 数据类型会有多少范围 https://dev.mysql.com/doc/refman/8.0/en/integer-types.html...可以看到 INT 类型取值范围是 -2147483648 - 4294967295。所以 在 MySQL 中 自增 ID 是会用完。那么问题来了,加入他 ID 用完会发生什么事呢?...如果会那么久需要创建 8 字节 INT 类型了,他最大是 2^64-1 那么问题又来了,你说 我有些业务是不需要主键 、不需要自增编号,我不创建这个字段,就好了,这样想恭喜你 回答错误.

9.4K20

如果MySQL自增 ID 用完了,怎么办?

表定义自增值达到上线后逻辑是:再申请下一个id时候,获取是同一个值(最大值)。大家可以插入sql设置id最大值,再insert一条不主动设置id语句就可以验证这一结论啦。...它在 MySQL 中是用来对应事务MySQL 内部维护了一个全局变量 global_query_id,每次执行语句时候将它赋值给 Query_id,然后给这个变量加 1。...如果当前语句是这个事务执行第一条语句,那么 MySQL 还会同时把 Query_id 赋值给这个事务 Xid。而 global_query_id 是一个纯内存变量,重启之后就清零了。...但是这个过程有脏读存在,那么这个id就不会是原子性,存在重复可能性。 thread_id 其实,线程 id 才是 MySQL 中最常见一种自增 id。...结果跟row_id一样,就会覆盖原有记录了。 上面介绍了几种MySQL自身一些自增id,其实,实际运用中,我们也可能会选择外部自增主键,然后持久化到数据库,以此来代替数据库自身自增id

1.2K20

MySQL中server_id一致带来问题

简 介 我们都知道在MySQL搭建复制环境时候,需要设置每个serverserver_id不一致,如果主库与从库server_id一致,那么复制会失败。...但是最近在解决一个客户问题时候,遇到一个有意思现象,客户环境有三台数据库服务器,一主两从,客户两台从库设置了相同server_id,在排查问题过程中,查看MySQL错误日志,发现有很多奇怪信息...从而导致从库I/O线程不断断开重连。 但是仔细看了一下unregister_slave()函数代码,并没有发现MySQL是根据server_id来注销dump线程。...看到这个函数传入参数是一个uint32类型slave_server_id,在函数中做事情是,遍历MySQL所有线程,如果遍历到一个线程是dump线程并且线程server_id是等于传入参数值话...因为在5.6之前版本中,还没有UUID概念,MySQL使用server_id来区分是否是同一台机器,而在5.6之后版本是使用UUID来区分。

1.6K60
领券