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,就直接插入

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值