求大佬帮解这个 mysql 自增的疑问,非常感谢!

256 天前
 Pzdmultiverse

问题重现:

第一步:创建 t10 表,并插入数据

create table t10(
	id int primary key auto_increment,
	num char(10)
);


insert into t10(num) values('1'),('2');

第二步:修改会话的自增步长和偏移量,并再插入两条数据

set session auto_increment_increment = 5;
set session auto_increment_offset = 5;

insert into t10(num) values('3'),('8');

这个时候查询第三条数据的 id 是 5 ,而不是 3 ,就很疑惑。

975 次点击
所在节点    MySQL
2 条回复
javaluo
256 天前
offset 是起始点,所以是从五开始始你看看对不



auto_increment_offset 的官方文档定义如下:

MySQL 官方文档中对 auto_increment_offset 的解释是,这个系统变量定义了自增列的起始值。当你有多个主从复制或群集节点时,这个变量特别有用,因为它可以帮助避免自增值在不同节点上的重复。

具体来说:

• auto_increment_increment 控制自增值之间的间隔。
• auto_increment_offset 决定了序列中第一个 auto_increment 值的起点。

当你插入新行时,自增列的值会从 auto_increment_offset 开始,并按照 auto_increment_increment 设置的值递增。如果表中已经有数据,MySQL 将继续按照这两个参数定义的规则递增,同时确保新的自增值不会和现有值冲突。

在单节点环境中,auto_increment_offset 通常设置为 1 ,但在主从复制或群集环境中,你可以设置不同的偏移量来确保每个节点生成的自增值是唯一的。例如,在一个双节点的环境中,你可以在一个节点上设置 auto_increment_increment 为 2 ,auto_increment_offset 为 1 ,而在另一个节点上设置 auto_increment_increment 为 2 ,auto_increment_offset 为 2 ,这样两个节点生成的自增值就不会冲突。
Rache1
256 天前
额,你在设置变量,你就没看过这些变量的用途吗

(以下内容未经测试)

>
mysql 中有自增长字段,在做数据库的主主同步时需要设置自增长的两个相关配置:auto_increment_offset 和 auto_increment_increment 。
>
auto_increment_offset 表示自增长字段从那个数开始,他的取值范围是 1 .. 65535
auto_increment_increment 表示自增长字段每次递增的量,其默认值是 1 ,取值范围是 1 .. 65535

Mysql 设置 auto_increment_increment 和 auto_increment_offset - DBArtist - 博客园
https://www.cnblogs.com/DBArtist/p/6053314.html

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1025238

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX