为什么要加锁?行锁、读锁(共享锁)、写锁(排它锁)

#排它锁 要等待?
#session1 会话1
start transaction;
  update feedback set title='10:20' where id =1;#排它锁
COMMIT; #提交事务

#session2 会话2
start transaction;
  select * from feedback where id=1;
  update feedback set title='10:01' where id =1 ;#排它锁#是否要等待读锁完成?
COMMIT; #提交事务

  select * from feedback where id=1 for update;#这个属于读锁吗?



前提:在事务中
加了read读行锁,例会话1中select * from feedback where id=1 for update;
那么其他会话(事务中或非事务中都)无法执行update id=1操作,必须要会话1提交事务才可执行。这就是行锁,除id=1以外其他行都不影响update操作。


说白了:
如果用了 SELECT * FROM TABLE FOR UPDATE,或 select * from feedback where id=1 for update;
其他的TRANS或非事务就不能对以上表或行进行UPDATE了直到以上的TRAN.COMMIT.试试就知道了.

所以说,这种情况(加读、写锁)一般是针对事务隔离级别为 Read Uncommitted; 来说的,因为这个级别会出现脏读、幻读之类的(但并发性能比较快些)。

#session1 会话1
start transaction;
select * from feedback where id<10 for update;#这个属于读锁
COMMIT; #提交事务

#session2 会话2
start transaction;
update feedback set title='10:01' where id =8 ;#排它锁#要等待读锁完成commit
COMMIT; #提交事务


#session3 会话3
start transaction;
update feedback set title='10:01' where id =12 ;#排它锁#不要等待
COMMIT; #提交事务

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值