mysql中的事务

发布时间 2023-11-26 14:28:41作者: 笑嘻嘻嘻了

1、事务的特性

  • 原子性:通过undo log实现。事务内的所有操作要么都成功,要么都失败

  • 一致性:通过redo log实现。事务处理完之后,数据要保持一致

  • 隔离性:通过MVCC多版本并发控制以及锁实现。事务可以并发执行,且互不干扰

  • 持久性:通过前三个特性实现。事务处理完之后,对数据的影响的永久的

2、事务并发会产生什么问题?

  • 脏读:读到过期的数据

  • 不可重复读:前后读到的数据内容不一致

  • 幻读:前后读到的数据数目不一致

(若要防止这些现象的产生,就要利用到事务的隔离性)

3、事务的隔离级别有哪些?

  1. 读未提交:事务之间能互相看到,即事务看到的是最新的数据。但会出现脏读、不可重复读和幻读

  2. 读提交:只有事务提交后,其他事务才能看到。会出现不可重复读和幻读

    • 使用了快照读的方式,事务中每个操作执行前都会生成一个ReadView
  3. 可重复读:不会出现脏读和不可重复读,且大概率不会出现幻读

    • 快照读:针对普通select语句,事务开始时创建一个ReadView,之后所有操作都使用这个ReadView
    • 当前读:针对select... for update语句,通过next-key lock方式解决幻读
  4. 串行化:不会出现任何问题

    • 使用读写锁。读读共享,读写互斥,写写互斥