V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
? MySQL 5.5 Community Server
? MySQL 5.6 Community Server
? Percona Configuration Wizard
? XtraBackup 搭建主从复制
Great Sites on MySQL
? Percona
? MySQL Performance Blog
? Severalnines
推荐管理工具
? Sequel Pro
? phpMyAdmin
推荐书目
? MySQL Cookbook
MySQL 相关项目
? MariaDB
? Drizzle
参考文档
? http://mysql-python.sourceforge.net/MySQLdb.html
Pzdmultiverse
V2EX  ?  MySQL

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

  •  
  •   Pzdmultiverse · 46 天前 · 771 次点击
    这是一个创建于 46 天前的主题,其中的信息可能已经有所发展或是发生改变。

    腾讯云最新优惠活动来了:云产品限时1折,云服务器低至88元/年 ,点击这里立即抢购:9i0i.cn/qcloud,更有2860元代金券免费领取,付款直接抵现金用,点击这里立即领取:9i0i.cn/qcloudquan

    (福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

    问题重现:

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

    create table t10(
    	id int primary key auto_increment,
    	num char(10)
    );
    
    
    insert into t10(num) values('1'),('2');
    

    1710867298716.png

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

    set session auto_increment_increment = 5;
    set session auto_increment_offset = 5;
    
    insert into t10(num) values('3'),('8');
    

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

    1710867327730.png

    2 条回复  ?  2024-03-20 08:55:59 +08:00
    javaluo
        1
    javaluo  
       46 天前 via iPhone
    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
        2
    Rache1  
       46 天前
    额,你在设置变量,你就没看过这些变量的用途吗

    (以下内容未经测试)

    >
    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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2499 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 09:58 · PVG 17:58 · LAX 02:58 · JFK 05:58
    Developed with CodeLauncher
    ? Do have faith in what you're doing.


    http://www.vxiaotou.com