zoukankan      html  css  js  c++  java
  • mysql 锁 实验

    CREATE TABLE `kk` (
      `a` int(11) NOT NULL,
      `b` int(11) NOT NULL,
      `c` int(11) NOT NULL,
      PRIMARY KEY (`a`),
      UNIQUE KEY `bb` (`b`),
      KEY `cc` (`c`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    mysql> select * from kk;
    +---+----+----+
    | a | b  | c  |
    +---+----+----+
    | 1 | 10 | 20 |
    | 3 | 13 | 23 |
    | 5 | 15 | 25 |
    | 7 | 17 | 27 |
    | 9 | 19 | 29 |
    +---+----+----+
    5 rows in set (0.16 sec)

                                                             铺助索引                                                           主健

    a=5                                                                                                           recordlock[5]

    a<5                                                                                                                      next_keylock[1,3,5]

    a<=5                                                                                                                    next_keylock[1,3,5,7]

    a>5                                                                                                                      next_keylock[7,9,sup]

    a>=5                                                                                                                    next_keylock[5,7,9,sup]

    b=15                                                 recordlock[5]                                                recordlock[5]

    b<15                                                 next_keylock[10,13,15]                                 recordlock[1,5]

    b<=15                                               next_keylock[10,13,15,17]                            recordlock[1,3,5]

    b>15                                                 next_keylock[17,19,sup]                               recordlock[17,19]

    c=25                                                 next_keylock[25] ,caplock[27]                       recordlock[25]

    c<25                                                 next_keylock[20,23,25]                                recordlock[20,23]

    c<=25                                               next_keylock[20,23,25,27]                           recordlock[20,23,25]

    c>25                                                 next_keylock[27,29,sup]                              recordlock[27,29]

    rr级别:  解决不可重复读,幻读

    set tx_isolation="REPEATABLE-READ"

    select * from kk where   a   ...      for update

    select * from kk where   b   ...       for update

    select * from kk where   c   ...       for update

    RR:对打开的游标都需要加锁,直到不满足条件那条记录

    RC:只对满足条件的记录加锁

    RR:

    NEXT-KEY-LOCK-------唯一等值查询---- 转换为RECORD LOCK

    select * from kk force index(primary) where a..       for update;   防数据量小,走全表,不走索引,会全表锁

    单个事务插入一条记录,不对该条记录的下一条记录加插入意向锁

    如果要插入记录的位置的下一条记录有CAP LOCK | NEX-KEY LOCK,就会在该记录加上插入意向锁,等待插入,如果下一条记录是RECORD LOCK,就直接插入

  • 相关阅读:
    LG P4213【模板】杜教筛(Sum)
    JZOJ 3447.摘取作物
    JZOJ 3448.公路维护
    JZOJ 4496. 【GDSOI 2016】第一题 互补约数
    jmeter的参数化之函数助手的使用
    window10平台运行jenkins.war的插件安装失败的解决
    jmeter的断言之响应断言的使用
    在虚拟机里安装完mysql后,开启root远程登录权限
    Word Excel PPT 2016从新手到高手
    Oracle 如何停止正在后台执行的impdp/expdp 任务
  • 原文地址:https://www.cnblogs.com/zengkefu/p/5615022.html
Copyright © 2011-2022 走看看