MySQL面试复习点-事务

74 阅读1分钟

事务:事务就是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体进行提交或撤销,这些操作要么都成功,要么都失败。

事务的四大特性(ACID):

  • 原子性:事务是不可分割的最小操作单位,要么全部成功、要么全部失败。
  • 一致性:事务完成时,所有的数据必须保持一致。
  • 隔离性:保证事务不受外部的并发操作的影响
  • 持久性:事务一旦提交或回滚,它对数据库中数据的改变是永久的。

并发事务带来的问题:

  • 脏读:一个事务读取到另外一个事务没有提交的数据。
  • 不可重复读:一个事务先后读取同一条数据,但两次读取的数据不同。
  • 幻读:一个事务在读取某一条数据时,查询不到该数据,但在插入时提示该数据已经存在。

事务的隔离等级:

  • read_uncommitted:读未提交,最低的隔离级别,会发生脏读、不可重复读、幻读
  • read_committed:读已提交,允许当前事务读取别的已经提交的事务。可以阻止脏读、会发生不可重复读、幻读
  • repeatable_read:可重复读。对同一数据的多次读取结果保证一致,除非是事务本身对数据进行修改,可以阻止脏读、不可重复读,会发生幻读。
  • serializable:最高的隔离级别,完全遵循ACID特性。所有的事务依次逐个执行,这样就不会到发生问题,但效率低下。