• innodb引擎对自增字段(auto_increment)的处理


    原文地址:https://dev.mysql.com/doc/refman/5.7/en/innodb-auto-increment-handling.html#innodb-auto-increment-lock-modes

    在涉及自增字段的插入时,innodb会上锁,上锁的类型由参数 innodb_autoinc_lock_mode 决定, 参数的不同取值对不同的insert类型加不同的锁。

    针对innodb_autoinc_lock_mode insert类型分为4大类:

    1. insert-like

    insert, insert...select, replace, replace...select, load data...

    2.simple inserts

    insert, replace, 不包含子查询的插入,特征是插入数量可以预知,但是不包括 insert... on duplicate key update, 因为这个语句使得插入数量变得不可预知

    3.Bulk inserts

    insert...select, replace...select, load data...

    插入数量不可以预知,innodb的处理到具体的行时才分配auto_increment字段的值

    4.Mixed-mode inserts

    INSERT INTO t1 (c1,c2) VALUES (1,'a'), (NULL,'b'), (5,'c'), (NULL,'d'); 数量预知,但是用户为auto_increment字段指定了部分而不是全部的值

    insert...on duplicate key update也属于此模式

    第1类包含了所有其他3类。

    不同的insert类型在不同的innodb_autoinc_lock_mode取值下的加锁情况如下表:

      innodb_autoinc_lock_mode=0(“traditional”)
    insert-like 表级AUTO-INC锁,插入语句结束锁释放(非事物结束),基于语句的复制安全,无法并发,自增字段连续
    simple inserts 表级AUTO-INC锁,插入语句结束锁释放(非事物结束),基于语句的复制安全,无法并发,自增字段连续
    Bulk inserts 表级AUTO-INC锁,插入语句结束锁释放(非事物结束),基于语句的复制安全,无法并发,自增字段连续
    Mixed-mode inserts 表级AUTO-INC锁,插入语句结束锁释放(非事物结束),基于语句的复制安全,无法并发,自增字段连续
      innodb_autoinc_lock_mode=1( consecutive”),默认值
    insert-like  
    simple inserts

    在分配值时计算出要使用的自增字段的值,使用一个轻量级的互斥锁(mutex lock), 其他的insert不用等到语句结束才能执行;

    但是如果这个insert正在等待一个持有表级AUTO-INC锁的insert结束,那它自己也会如同加一把表级AUTO-INC锁

    自增字段连续;

    基于语句的复制安全

    Bulk inserts

    表级AUTO-INC锁,插入语句结束锁释放(非事物结束),

    对于insert.A..select...B, replace.A..select...B

    如果表A 和表B不是同一个,在A表选出的第一条记录加共享锁后,然后在B表加表级AUTO-INC锁;

    如果表A 和表B是同一个,在所有select到的行上加共享锁后,再在B表加表级AUTO-INC锁;

    自增字段连续

    基于语句的复制安全

    Mixed-mode inserts

    基于语句的复制安全

  • 相关阅读:
    凸包Graham Scan算法实现
    人与人之间的差距是从大学开始的
    google笔试题两个n维数组logn求中位数问题 zz
    matlab中使用结构体
    人脸识别理论与应用研究 zz
    如果让我再读一次研究生 zz
    Open Yale CourseFinancial MarketNote1 zz
    哈尔小波变换示例
    全屏模式 硬缩放
    APE结合键盘控制角色运动 转
  • 原文地址:https://www.cnblogs.com/janey/p/7412675.html
Copyright © 2020-2023  润新知