MySQL事务小记

本文最后更新于:2021年10月14日 晚上

MySQL事务小记

一.什么是事务

事务:一个最小的不可再分的工作单元

通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务就是一个最小的工作单元), 一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成. 事务只和DML语句有关,或者说DML语句才有事务。这个和业务逻辑有关,业务逻辑不同,DML语句的个数不同

二.事务的四大特征(ACID)

  • 原子性(Atomicity): 事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。

  • 一致性(Consistency): 事务开始之前、执行中、执行完毕,这些时间点,多个人去观察事务操作的数据的时候,看到的数据都是一致的。

  • 隔离性(Isolation): 一个事务的执行不能被其他事务干扰。每个事务的执行过程是相对独立的;

  • 持久性(Durability): 事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

三.事务中的并发问题

  • 脏读: 脏读又称无效数据的读出, 一个事务在执行的过程中读取到了其他事务还没有提交的数据。例如:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
  • 读已提交: 一个事务操作过程中可以读取到其他事务已经提交的数据。事务中的每次读取操作,读取到的都是数据库中其他事务已提交的最新的数据
  • 可重复读:一个事务操作中对于一个读取操作不管多少次,读取到的结果都是一样的。
  • 不可重复读: 事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。
  • 幻读: 事务A在执行读取操作,需要两次统计数据的总量,前一次查询数据总量后,此时事务B执行了新增数据的操作并提交后,这个时候事务A读取的数据总量和之前统计的不一样,就像产生了幻觉一样,平白无故的多了几条数据,成为幻读。

本文作者: CodeAnime
本文链接: https://codeanime.cc/MySQL%E4%BA%8B%E5%8A%A1%E5%B0%8F%E8%AE%B0.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!