Mysql四种锁

行级锁:

  • 在mysql中,行级锁不是直接锁记录,而是锁索引,索引分为主键索引和非主键索引。
  • 一条SQL语句操作了主键索引,那么MySQL将主键索引锁定。
  • 一条SQL语句操作了非主键索引,那么MySQL先锁定非主键索引,再锁定相关的非主键索引。
  • 在InnoDB中,如果SQL语句没有涉及索引,则会通过隐藏的聚簇索引来对记录加锁。也就是没有通过索引搜索数据,那么InnDB就会对表中所有的数据进行加锁。无索引,查找记录时候需扫描全表,扫描全表,则锁定表。
  • row-level loking ,锁定一行记录
  • 开销大,加锁满,会死锁。
  • 索粒度小,发生锁冲突概率小, 并发效率高。
  • 适合并发写。

表级锁:

 

  • 表级锁,一般是指表结构共享锁锁,是不可对该表执行DDL操作,但对DML操作不限制。行级锁之前需要先加表结构共享锁。如果用表级锁,其他客户将不能进行查询操作,因此开发中一般使用行级锁。
  • table-level locking,锁定整张表。
  • 开销小,加锁快,不会死锁。
  • 锁粒度大,发生锁冲突概率大,并发效率低。
  • 适合查询。

乐观锁:

  • 乐观锁认为并发操作很难发生,但并不是一定不会发生,所有存在着措施对该情况进行应对,也就是版本号version,每修改一次数据,version改变一次。
  • 例如,A窗口在年月日确定的某天12:00阶段操作更新了表中的数据,12:02按下确定键。但是同年月日的12:01阶段B窗口更新并确定了该表中的数据,那么该表的版本号version已经改变了,那么于此同时A窗口操作的数据更新失败。这也表示并发问题已经发生,此次操作需要回滚。
  • 进行数据读取时,不加锁。

悲观锁:

  • 和乐观锁相反,悲观锁认为并发问题极易发生。
  • A窗口在进行数据更新操作时,B窗口不能操作该数据,B窗口要想更新数据,必须等A窗口操作完成才可以。
  • 进行数据操作时,无论读或写,都会对记录进行加锁,为了防止其他线程对数据进行更改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值