MST

星途 面试题库

面试题:MySQL中不同事务隔离级别下锁的应用有何不同

请阐述在MySQL的读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)这四种事务隔离级别下,锁机制是如何应用的,每种隔离级别下可能出现什么样的锁相关问题?
13.8万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

读未提交(Read Uncommitted)

  • 锁机制应用:对读取操作基本不使用锁,即事务可以读取其他事务尚未提交的数据。写入操作通常会使用排它锁(X锁),防止其他事务同时写入。
  • 锁相关问题
    • 脏读:一个事务可以读取到另一个未提交事务修改的数据。如果未提交事务回滚,那么已读取该数据的事务获取到的就是无效数据。

读已提交(Read Committed)

  • 锁机制应用:读取操作使用共享锁(S锁),但在读取完成后立即释放。写入操作使用排它锁(X锁),直到事务结束才释放。
  • 锁相关问题
    • 不可重复读:在一个事务内多次读取同一数据,由于其他事务在期间提交了对该数据的修改,导致多次读取结果不一致。

可重复读(Repeatable Read)

  • 锁机制应用:读取操作使用共享锁(S锁),并且在事务结束前不会释放。写入操作使用排它锁(X锁),同样在事务结束前不释放。此外,对于可能影响读取结果的范围查询,会使用间隙锁(Next-Key Lock),防止其他事务在查询范围内插入新数据。
  • 锁相关问题
    • 幻读:当一个事务按照某个条件多次查询记录,在两次查询之间,其他事务插入了满足该查询条件的新记录,导致该事务再次查询时,结果集包含了之前未出现的记录。在MySQL InnoDB引擎中,通过间隙锁机制,在一定程度上解决了幻读问题,但严格来说幻读并没有完全杜绝。

串行化(Serializable)

  • 锁机制应用:所有事务按照顺序依次执行,读操作和写操作都使用排它锁(X锁),并且事务执行期间一直持有锁,直到事务结束。
  • 锁相关问题
    • 并发性能低:由于所有事务串行执行,系统并发性能会受到极大影响,因为锁的竞争激烈,大量事务需要等待锁的释放。