当前位置:Gxlcms > 数据库问题 > MySQL 常见面试题

MySQL 常见面试题

时间:2021-07-01 10:21:17 帮助过:22人阅读

  • READ_UNCOMMITTED(未授权读取): 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读

  • READ_COMMITTED(授权读取): 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生

  • REPEATABLE_READ(可重复读): 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。

  • SERIALIZABLE(串行): 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。

    这里需要注意的是:Mysql 默认采用的 REPEATABLE_READ隔离级别 Oracle 默认采用的 READ_COMMITTED隔离级别.

    事务隔离机制的实现基于锁机制和并发调度。其中并发调度使用的是mvcc(多版本并发控制),通过保存修改的旧版本信息来支持并发一致性读和回滚等特性。

 

如果不考虑事务的隔离性,会出现以下问题:

  • 脏读:指一个线程中的事务读取到了另外一个线程中未提交的数据。
  • 不可重复读(虚读):指一个线程中的事务读取到了另外一个线程中提交的update的数据。
  • 幻读:指一个线程中的事务读取到了另外一个线程中提交的insert的数据。

如何理解幻读与不可重复读很关键:参考文章https://segmentfault.com/a/1190000016566788

InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁

MySQL 常见面试题

标签:导致   table   索引   持久   多版本   直接   线程   不同的   date   

人气教程排行