• 技术文章 >数据库 >MySQL

    mysql临键锁的使用

    小妮浅浅小妮浅浅2021-10-22 10:07:33原创3599

    1、默认情况下,innodb使用临键锁锁定记录。

    1

    select ... for update

    2、当查询索引包含唯一属性时,临键锁将被优化并降级为记录锁,即只锁定索引本身,而不是范围。

    3、不同场景下的临键锁会退化。

    实例

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    79

    80

    81

    82

    83

    84

    85

    86

    87

    88

    89

    90

    91

    92

    事务1

      

    start transaction;

    select SLEEP(4);

    select * from test where age=22 for update;

    select * from test where age>23 for update;

    select sleep(20);

    commit;

      

    **************************

    事务2

      

    start transaction;

    select sleep(8);

    select * from test where age=20 for update;

    select * from test where age=21 for update;

    select * from test where age=22 for update;

    select * from test where age=23 for update;

    commit;

      

      

    ************************************

    事务执行状态

      

    事务1

      

    start transaction

    > OK

    > 时间: 0s

      

      

    select SLEEP(4)

    > OK

    > 时间: 4.001s

      

      

    select * from test where age=22 for update

    > Affected rows: 0

    > 时间: 0.001s

      

      

    select * from test where age>23 for update

    > Affected rows: 0

    > 时间: 0.001s

      

      

    select sleep(20)

    > OK

    > 时间: 20s

      

      

    commit

    > OK

    > 时间: 0.001s

      

      

    ***********************

    事务2

      

    start transaction

    > OK

    > 时间: 0.001s

      

      

    select sleep(8)

    > OK

    > 时间: 8s

      

      

    select * from test where age=20 for update

    > Affected rows: 0

    > 时间: 0.001s

      

      

    select * from test where age=21 for update

    > Affected rows: 0

    > 时间: 0.001s

      

      

    select * from test where age=22 for update

    > Affected rows: 0

    > 时间: 14.158s

      

      

    select * from test where age=23 for update

    > Affected rows: 0

    > 时间: 0.001s

      

      

    commit

    > OK

    > 时间: 0s

    以上就是mysql临键锁的使用,希望对大家有所帮助。更多mysql学习指路:MySQL

    推荐操作系统:windows7系统、mysql5.8、DELL G3电脑

    专题推荐:mysql 临键锁
    上一篇:mysql间隙锁的用法 下一篇:mysql插入意向锁的使用

    相关文章推荐

    • mysql中查询的请求过程• mysql中查询优化器的操作• mysql中正则表达式是什么• mysql中regexp_instr函数的使用• mysql中regexp_substr函数的使用• mysql中regexp_replace函数的使用• mysql全局锁如何使用• mysql元数据锁是什么• mysql间隙锁的用法

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网