• mysql 是如何保证在高并发的情况下autoincrement关键字修饰的列不会出现重复


    转载自 https://juejin.im/book/5bffcbc9f265da614b11b731/section/5c42cf94e51d45524861122d#heading-8
    mysql实现这个机制的背后,主要有两种方式

    1. 采用 AUTO-INC 锁,也就是在执行插入语句时,就在表级别上加一个AUTO-INC锁。然后,为每条待插入记录的AUTO_INCREMENT修饰的列分配递增的值。在该语句执行完成之后,再把AUTO-INC锁释放掉。需要注意的是,在释放锁的时候,不同于一般情况下的读锁和写锁,是在事务执行完成之后自动释放锁。AUTO-INC锁是在当前语句插入完成之后释放的。
    2. 采用一个轻量级的锁,在为插入语句生成AUTO_INCREMENT修饰的列分配递增的值时获取该锁,在数值分配完成后就释放该锁。所以采用这种方式的话,必须清楚该插入语句具体的插入数量。同时,这种方式避免锁表,所以,效率较高。

    我们可以执行

    SHOW VARIABLES LIKE '%innodb_autoinc_lock_mode%';
    

    这条sql语句,查看我们本地的mysql数据库服务器是采用的那种方式
    若值为0,AUTO-INC锁方式;
    若值为1,轻量级锁方式;
    若值为2,两种方式混着来(就是插入记录数量确定的情况下使用轻量级锁,不确定时采用AUTO-INC锁方式)。

    tips:
    采用轻量级锁时,可能会造成不同事务中,插入语句生成的数值是交叉的。

  • 相关阅读:
    代码大全2阅读笔记之最后总结
    web商品系统最终版
    web商品系统
    期末总结
    2020/12/13
    2020/12/12
    2020/12/11
    2020/12/10
    2020/12/09
    2020/12/08
  • 原文地址:https://www.cnblogs.com/theone67/p/11083371.html
Copyright © 2020-2023  润新知