insert时实现某一字段自增_MySQL auto_increment实现

65b1c12485c7204578ff0f574b830ab6.png

运维的时候,经常遇到auto_increment的疑惑:

  • 机器异常crash,重启后id回退的问题

  • 性能考虑,每次获取肯定不会持久化,内存中取值,statement复制如何保证主备一致

  • id的取值受binlog的保护吗

1. auto_increment相关的参数控制

1.1 innodb_autoinc_lock_mode

  • 每一个statement获取一个排他lock,直到statement结束,保证statement执行过程的id是连续的。

  • 单条确定insert影响的条数的时候,使用mutex。如果是insert select,load data这样的,使用排他lock。

  • 多条statement产生的id会穿插在一起,如果是statement复制,会产生不一致的情况。

1.2 

auto_increment_incrementauto_increment_offset控制自增的起始值和interval

2. auto_increment相关的数据结构

  • 锁模式中LOCK_AUTO_INC,即auto_increment的表锁。

/* Basic lock modes */enum lock_mode {
         LOCK_IS = 0,    /* intention shared */    LOCK_IX,    /* intention exclusive */    LOCK_S,    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值