1. 概念

事务是一个原子操作,是一个最小执行单元。可以由一个或者多个SQL语句组成,在同一个事务当中,所有的SQL语句都成功执行时,整个事务成功,有一个SQL语句执行失败,整个事务都执行失败。

2. 事务的边界

开始:连接到数据库,执行一条DML语句,上一个事务结束后,又输入一条DML语句,即事务的开始
结束:

  1. 提交:
    1. 显示提交:commit
    2. 隐式提交:一条创建、删除语句,正常退出(客户端退出连接)
  2. 回滚:
    1. 显示回滚:rollback
    2. 隐式回滚:非正常退出(断电、宕机),执行了创建、删除语句,但是失败了,会为这个无效语句执行回滚。

      3. 事务原理

      数据库会为每一个客户端都维护一个空间独立的缓存区(回滚段),一个事务中所有的增删改查语句的执行结果都会缓存在回滚段中,只有当事务中所有SQL语句均正常结束(commit),才会将回滚段中的数据同步到数据库。否则无论因为哪种原因失败,整个事务都将会回滚(rollback)。

      4. 事务特性

      ACID
  • Atomicity 原子性
    • 表示一个事务内所有操作都是一个整体,要么全部成功,要么全部失败
  • Consistency 一致性
    • 表示一个事务内有一个操作失败时,所有更改过的数据都会回滚到修改前的状态
  • Isolation 隔离性
    • 事务查看数据操作时,数据所处的状态,要么是另一并发事务,修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。
  • Durability 持久性
    • 持久性事务完成后,他对于系统的影响是永久性的

      5.应用

      1. # 模拟转账,用户1给用户2转账
      2. START TRANSACTION;
      3. UPDATE account SET money = money - 100 WHERE id=1;
      4. UPDATE account SET money = money + 100 WHERE id=2;
      5. COMMIT;
      6. ROLLBACK;