mysql的锁

一、从属性分

  • 共享锁(读锁)
    在一个事务中,对数据加上读锁之后,其他事物只能加读锁,不能加写锁。
  • 排它锁(写锁)
    在一个事务中,对数据加写锁后,其他事物不能加任何锁。表锁不需要等待事务提交就可以释放。行锁事务提交后才会释放
    二、从粒度分
    表锁,行锁,页锁(BDB引擎独有),记录锁,间隙锁,临键锁
    三、从锁的状态分
    意向共享锁,意向排他锁

更新某一行,事务还没提交。修改表结构会怎样?
更新某一行会加行锁,事务没提交,行锁未释放,修改表结构会加表锁。修改表结构会阻塞。事务提交后才会执行

快照读
select xx from xxx
不加锁的普通 SELECT 都属于快照读。
单纯的查询操作叫做快照读,使用mvcc版本控制,其他事务操作不可见
但是不能完全解决幻读。事务A查询得到10条记录,事务B插入一条id=11。事务A在查询仍然是10条。但是事务A可以修改id=11的数据,事务A在查询会查询到11条记录。这种还是会产生幻读。

当前读和update detele都是使用next-key Lock算法
select for update
next-key Lock就是间隙锁加行锁
锁住上下两个间隙。在锁住索引
如果where条件不走索引,next-key Lock会锁住表的所有间隙和所有记录。相当于锁表

快照读根据readView和undolog结合实现事务的隔离
每行记录最后面隐藏了最新的版本号trx,并且隐藏了此版本指向undolog的指针
undolog保存了一个版本链。如果事务id与trx相等,直接返回mysql数据即可,如果不相等需要去undolog根据版本链找到对应版本数据返回
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值