Mysql-锁模块

锁模块的常见问题

  • MyISAM与Innodb在锁方面的区别是什么
  • 数据库四大事务的特性什么
  • 事务隔离级别以及各级别下并发访问问题
  • Innodb可重复读级别下如何避免幻读
  • RC、RR级别下的Innodb的非阻塞读如何实现

MyISAM锁

MyISAM的锁是表级锁,无论读锁还是更新锁都会锁住整张表,并且是互斥的,如在存储引擎为MyISAM的表中先执行一个大数据量的查询,在查询过程中在执行更新操作,则更新操作会等待查询完毕,释放完读锁之后才可以加上更新锁,从而验证上述MyISAM的锁特性
读锁也称为共享锁,一个session在读的过程中另一个session也可以进行读操作

MyISAM的存储引擎的表不支持事务

Innodb锁

  • innodb是默认为行级锁,且事务默认为自动提交(show variables like ‘%autocommit%’)
  • innodb上共享锁的语句(select * from TB_x where id=3 lock in share mode)
  • innodb在查询未用到索引的时候使用的是表级锁

MyISAM与Innodb的适用场景

MyISAM的适应场景如下
  • 频繁执行全表count语句
  • 对数据增删改频率不高,查询非常频繁
  • 无事务
    Innodb的适应场景如下
  • 增删改相当频繁
  • 可靠性要求比较高,要求支持事务

数据库锁的分类

  • 按锁的粒度划分,可分为行级锁、表级锁、页级锁
  • 按锁级别划分,可分为共享锁、排他锁
  • 按加锁方式划分,可分为自动锁、显示锁(lock in shar mode OR for update)
  • 按操作划分,可分为DML锁、DDL锁
  • 按使用方式划分为悲观锁、乐观锁
悲观锁与乐观锁的实现
悲观锁
  • 悲观锁是对数据提前进行加锁,依赖于数据库层面,对其他事务呈保守策略,故在高并发情况下影响效率

乐观锁

  • 乐观锁是在表中引入version字段,每次更新操作之前先查询出version号,更新时以该version字段作为条件,若不一致则更新失败,说明此session数据以过期,根据逻辑处理要求重新更新
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值