基础知识点

事务四大特性(ACID)

原子性( Atomicity)

  • 一个事务中包含的所有操作作为一个整体在数据库中执行,要么全部成功,对数据库中的数据产生改变;要么全部失败,对数据库中的数据不产生影响。

一致性(Consistency)

  • 数据库的事务不能破坏关系数据的完整以及业务逻辑上的一致性
  • 例如账户A向账户B进行转账,不能出现A账户已经扣款,但是B账户未加款的情况

隔离性(Isolation)

  • 在并发环境下,不同事务同时访问数据库时,每个事务之间没有任何干扰
  • 下方将详细介绍隔离级别

持久性(Durability)

  • 事务一旦被提交,数据库中的数据发生永久性改变,并且不会因为数据库系统故障造成丢失已经提交的事务情况

隔离级别

读未提交

描述

  • 即使事务没有提交,其他事务也可以读到
  • 写数据时只会锁住相应的行

导致问题

脏读

  • 事务A 读取了事务B更新的操作,但是B进行了回滚,并未真正提交到数据库中,此时事务A读到的是脏数据

小结

  • 性能上来说读未提交并不会比其他隔离级别有较大的性能提升,并且会造成较大的问题,在实际中很少使用这个隔离级别

读已提交

描述

  • 每个事务只能读取其他事务已经提交的内容,无法读取未提交内容,为提交的内容对于其他事务是不可见的
  • 大多数数据库的默认隔离级别,但不是MySQL的默认隔离级别
  • 解决了脏读问题

导致问题

  • 导致了不可重复读的问题,并发状态下同一个事务中两次同样的查询可能得到不同的结果

可重复读(默认级别)

描述

  • 保证同一个事务中多次读取同样的记录结果是一直的
  • MySQL的默认隔离级别
  • 写数据的时候会锁住整张表
  • 解决了不可重复读的问题

导致问题

  • 产生了幻读的问题,即事务B两次读取的过程中,A新增了数据,导致事务B读取到了前一次没有读取到的行

总结

  • 幻读和不可重复读的区别:

    • 幻读更加强调的是行的增加
    • 而不可重复读强调的是数据的更新

串行化

描述

  • 最高的隔离级别,事务只能一个接一个的顺序执行,不允许并发执行,解决了上述所有问题
  • 读写数据的时候都会锁住整张表

导致问题

  • 效率会被严重降低,导致大量超时

总结

隔离级别脏读不可重复读幻读
读未提交
读已提交×
不可重复读××
串行化×××

索引问题

注意点

最后修改:2022 年 04 月 02 日
如果觉得我的文章对你有用,请随意赞赏