【MySQL技术内幕】37-一致性锁定读

在默认配置下,即事务的隔离级别为 REPEATABLE READ模式下, InnoDB存储引擎的 SELECT操作使用一致性非锁定读。但是在某些情况下,用户需要显式地对数据库读取操作进行加锁以保证数据逻辑的一致性。而这要求数据库支持加锁语句,即使是对于SELECT的只读操作。 InnoDB存储引擎对于 SELECT语句支持两种一致性的锁定读(locking read)操作:

  • SELECT… FOR UPDATE
  • SELECT… LOCK IN SHARE MODE

SELECT… FOR UPDATE对读取的行记录加一个X锁,其他事务不能对已锁定的行加上任何锁。SELECT… LOCK IN SHARE MODE对读取的行记录加一个S锁,其他事务可以向被锁定的行加S锁,但是如果加X锁,则会被阻塞。

对于一致性非锁定读,即使读取的行已被执行了 SELECT… FOR UPDATE,也是可以进行读取的,这和之前讨论的情况一样。此外, SELECT… FOR UPDATE, SELECT… LOCK IN SHARE MODE必须在一个事务中,当事务提交了,锁也就释放了。因此在使用上述两句 SELECT锁定语句时,务必加上 BEGIN, START TRANSACTION或者SET AUTOCOMMIT=0。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值