MySQL⑤事务


事务 Transaction

事务:一组操作的集合,是不可分割的工作单位。

  • 事务会把所有操作,作为一个整体向系统提交或撤销请求
  • 要么同时成功,要么同时失败
  • :转账

MySQL 默认自动提交事务

每执行一条 DML 语句,MySQL 立即将事务提交到数据库

1、事务操作

  1. 控制事务

    # 方式一:关闭自动提交事务
    SET @@autocommit = 0;
    
    # 方式二:开启事务(建议)
    START TRANSCATION 或 BEGIN;
    
  2. 提交 / 回滚事务

    # 事务正常时提交
    COMMIT;
    # 事务异常时回滚
    ROLLBACK;
    

2、ACID 四大特性(!)

  1. 原子性(Atomicity):事务是不可分割的最小操作单元(要么都成功,要么都失败)
  2. 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态(要么都提交,要么都不提交)
  3. 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在独立环境下运行,不受外部并发操作影响。
  4. 持久性(Durability):事务一旦提交或回滚,结果就被持久化到存储器中。

3、并发事务

多个事务并发操作数据库时,会出现以下问题。

含义 原因 / 后果
脏读 一个事务读到另一个事务未提交的数据 事务 A 读到一行记录发现未修改,实际上是 事务 B 未提交
不可重复读 一个事务先后读取同一条记录,但两次读取的数据不同 事务 B 在事务 A 查询之后。修改了记录
幻读 一个事务按条件查询数据时,没有对应的记录;在插入对应记录时,又发现这行数据已经存在 事务 B 在事务 A 查询之后,插入了满足相应条件的记录

4、隔离级别

数据安全性与隔离级别成正比,性能与隔离级别成反比。

  • Read uncommitted(读未提交)
  • Read committed(读已提交)
  • Repeatable Read(可重复读)
  • Serializable(序列化)

?表示该隔离级别解决的问题

脏读 不可重复读 幻读
RU - - -
RC ? - -
RR(MySQL 默认) ? ? -
Serializable ? ? ?