事务

概念

事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。

事务是一组原子性的 SQL 语句,当有任何一条语句因崩溃或其他原因无法执行时,所有语句都不会执行。事务内的语句要么全部执行成功,要么全部执行失败。

事务

ACID

  1. 原子性(Atomicity):
    一个事务在逻辑上是不可分割的最小单位,整个事务中的所有操作要么全部成功,要么全部失败。
  2. 一致性(Consistency):
    执行事务后,数据库从一个正确的状态变化到另一个正确的状态。
    数据库在事务执行前后都保持一致性状态。在一致性状态下,所有事务对同一个数据的读取结果都是相同的。
  3. 隔离性(Isolation):
    一个事务所做的修改在最终提交以前,对其它事务是不可见的。
    并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的。
    针对并发事务而言,要隔离并发运行的多个事务之间的影响,数据库提供了多种隔离级别。
  4. 持久性(Durability):
    一旦事务提交成功,其修改就会永久保存到数据库中,此时即使系统崩溃,修改的数据也不会丢失。

系统发生崩溃可以用重做日志(Redo Log)进行恢复,从而实现持久性。与回滚日志记录数据的逻辑修改不同,重做日志记录的是数据页的物理修改。

AUTOCOMMIT
MySQL 默认采用自动提交模式。也就是说,如果不显式使用START TRANSACTION语句来开始一个事务,那么每个查询操作都会被当做一个事务并自动提交。

事务

  • 只有满足一致性,事务的执行结果才是正确的。
  • 在无并发的情况下,事务串行执行,隔离性一定能够满足。此时只要满足原子性,就一定能满足一致性。
  • 在并发的情况下,多个事务并行执行,事务不仅要满足原子性,还要满足隔离性,才能满足一致性。
  • 事务满足持久化是为了能应对系统崩溃的情况。