mysql面试题——锁相关

一:InnoDB的锁机制?

为保证数据的一致性,需要对并发操作进行控制 ,因此产生了 锁 。同时锁机制也为实现MySQL的各个隔离级别提供了保证。

二:什么是排他锁和共享锁?

共享锁(读锁):针对同一份数据,多个事务的读操作可以同时进行而不会互相影响,但任何事务都不能对数据进行修改,直到已释放所有共享锁。
排他锁(写锁):如果一个事务对数据A加上排他锁后,则其他事务不能再对A加任任何类型的锁。获得排他锁的事务既能读数据,又能修改数据。

三:表级锁、行级锁、页级锁的描述与特点

表级锁:对当前操作的整张表加锁

  1. 表级别的S锁、X锁
    LOCK TABLES t READ :InnoDB存储引擎会对表 t 加表级别的 S锁 。
    LOCK TABLES t WRITE :InnoDB存储引擎会对表 t 加表级别的 X锁 。
    对一个表加上读锁:
    对一个表加上写锁:mysql面试题——锁相关_第1张图片
    总结:MyISAM在执行查询语句,会给涉及的所有表加读锁,在执行增删改操作之前,会给 涉及的表加写锁。InnoDB存储引擎是不会为这个表添加表级别的读锁或者写锁
    2. 意向锁

四:什么是意向锁?

现在有两个事务,分别是T1和T2,其中T2试图在该表级别上应用共享或排它锁,如果没有意向锁存在,那么T2就需要去检查各个页或行是否存在锁;如果存在意向锁,那么此时就会受到由T1控制的表级别意向锁的阻塞。T2在锁定该表前不必检查各个页或行锁,而只需检查表上的意向锁。
为了解决这个问题,MySQL引入了意向锁机制。当一个事务请求获取一个行级锁或表级锁时,MySQL会自动获取相应的表的意向锁。意向锁有两种类型:意向共享锁和意向排他锁。意向锁是表级锁,不会和行级的X,S锁发生冲突,只会和表级的X,S发生冲突
意向共享锁:事务有意向对表中的某些行加共享锁
意向排他锁:事务有意向对表中的某些行加排他锁

你可能感兴趣的:(mysql,java)