zoukankan      html  css  js  c++  java
  • 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

    基于语句的复制安全

  • 相关阅读:
    SortedList的使用示例
    oracle 查询
    sql group by统计
    删除隐藏盘符的隐藏共享,打开隐藏盘符
    【C#】Entity Framework 增删改查和事务操作
    CSS rem长度单位
    HTML 页面meta标签
    VUE 生成二维码(qrcodejs)
    VUE 密码验证与提示
    JavaScript 加解密库(crypto-js)
  • 原文地址:https://www.cnblogs.com/janey/p/7412675.html
Copyright © 2011-2022 走看看