mysql 事务锁

  • 行锁  (innodb 行级锁并不是直接锁记录,而是锁索引,如果一条SQL语句用到了主键索引,mysql会锁住主键索引;如果一条语句操作了非主键索引,mysql会先锁住非主键索引,再锁定主键索引。)
  • 行锁必须有索引才能实现,否则会自动锁全表,那么就不是行锁了。

    1. 假设有两个事务 A ,B。当A 事务通过索引列 update了id=1的数据时,id =1列被锁定,B事务需要等事务A 释放id=1的行锁才能对id=1这行数据做写操作,同样的如果B事务通过非索引列查询对id=1这行数据做写操作会获取表锁 ,但是因为A持有id=1的行锁,所以也需要等事务A释放才能操作。 但是事务B可以对其他列执行update操作,可以执行insert操作。

   2. 同样的,如果事务A 获取了表锁,那么B事务如果想要做写入(insert, update)操作必须等到事务A 释放了表锁才能执行成功

   **事务中查询是不加锁的** 



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值