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

    基于语句的复制安全

  • 相关阅读:
    HDU 2844 Coins(多重背包)
    HDU 4540 威威猫系列故事——打地鼠(DP)
    Codeforces Round #236 (Div. 2)
    FZU 2140 Forever 0.5
    HDU 1171 Big Event in HDU(DP)
    HDU 1160 FatMouse's Speed(DP)
    ZOJ 3490 String Successor
    ZOJ 3609 Modular Inverse
    ZOJ 3603 Draw Something Cheat
    ZOJ 3705 Applications
  • 原文地址:https://www.cnblogs.com/janey/p/7412675.html
Copyright © 2011-2022 走看看