所在的位置: mysql >> mysql市场 >> MySQL面试题三

MySQL面试题三

锁相关MySQL锁机制当数据库有并发事务的时候,可能会产生数据的不一致,这时候需要一些机制来保证访问的次序,锁机制就是这样的一个机制锁类别上来分MySQL有哪些锁共享锁:又叫读锁排他锁:数据写入时,对数据加上排他锁;排他锁也称作独占锁,在某一时刻只能被一个线程占有,其他线程必须等待锁被释放之后才可能获取到锁;排他锁只能加一个,与其他排他锁及共享锁都互斥隔离级别与锁的关系在读未提交级别下,读取数据不需要加共享锁,这样就不会跟被修改的数据上的排他锁冲突在读已提交级别下,读操作需要加共享锁,语句执行完以后会释放共享锁在可重复读级别下,读操作需要加共享锁,在事务提交以后才释放共享锁在串行化级别下,该级别锁定整个范围的键,并一直持有锁,直到事务完成按照锁的粒度来分数据库锁有哪些行级锁是MySQL中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁加锁粒度最小,开销最大,会出现死锁,锁冲突概率低,并发度最高表级锁是MySQL中锁定粒度最大的一种锁,表示对当前操作的整张表加锁实现简单,资源消耗较少,MyISAM与InnoDB都支持表级锁开销小,加锁快,不会出现死锁,锁定粒度大,锁冲突概率最高,并发度最低页级锁是MySQL中锁定粒度介于行锁和表锁中间的一种锁会出现死锁,并发度一般,开销和锁定粒度介于表锁和行锁之间MySQL中InnoDB引擎的行锁如何实现基于索引完成行锁例:select*fromtable_namewhereid=23forupdate,forupate可根据查询条件完成行锁锁定,并且id是有索引键的列如果id不是索引键那么InnoDB将完成表锁,并发就没有了InnoDB存储引擎的锁算法Recordlock:单个行记录上的锁Gaplock:间隙锁,锁定一个范围,但不包括记录本身,会导致幻读产生Next-keylock:上面两种的结合,锁定一个范围,包括记录本身(对行的查询使用)当查询的索引含有唯一属性时,next-keylock降级为recordlock什么时死锁,如何解决死锁是指多个事务在同一资源上相互占用,并请求锁定对方的资源,导致恶性循环解决:分布式事务锁或者乐观锁乐观锁和悲观锁乐观锁:假设不会发生并发冲突,只是在提交操作时检查是否违反数据完整性;在修改数据的时候把事务锁起来,通过version的方式来进行锁定;实现方式一般为版本号机制或CAS算法实现悲观锁:假定会发生并发冲突,在查询完数据的时候就把事务锁起来,直到提交事务;实现方式为数据库中的锁机制forupdate使用场景乐观锁适用于读多写少的场景,也是一般项目中的大多数场景多写的场景下可以用悲观锁-END-远方聂努达




转载请注明:http://www.aierlanlan.com/rzdk/431.html

  • 上一篇文章:
  •   
  • 下一篇文章: