MySQL 学习记录

本文最后更新于:3 年前

MySQL 记录

1.1 事务的特性(ACID)

  1. 事务要求 ACID 的特性,即:原原子子性性、、一一致致性性、、隔隔离离性性、、持持久久性性。
  2. 所谓原子性,是指整个数据库的每个事务都是不可分割的单位。只有事务中的所有 SQL 语句都执行成功,才算整个事务成功,事务才会被提交。如果事务
    中任何一个 SQL 语句执行失败,整个事务都应该被回滚。
  3. 所谓一致性,是指将数据库从一种一致性状态转换为下一种一致性状态。不允许数据库中的数据出现新老数据都有的情况,要么都是老数据,要么都是新数
    据。用更书面化的表达就是:数据的完整性约束没有被破坏。
  4. 所谓隔离性,是指一个事务的影响在该事务提交前对其他事务都不可见,它通过锁机制来实现。
  5. 所谓持久性,是指事务一旦被提交,其结果就是永久性的。即使发生宕机等故障,数据库也能将数据恢复。

1.2 事务的语法

  1. 在 MySQL 命令行的默认设置下,事务是自动提交的,即执行了SQL 语句之后会马上执行 commit 操作,我们可以设置 set autocommit=0 来禁用当前回话
    的自动提交。
  2. 还可以用 begin 、start transaction 来显式的开始一个事务。
  3. Commit 在默认设置下是等价于 commit work 的,表示提交事务。
  4. rollback 在默认设置下等价于 rollback work,表示事务回滚。
  5. savepoint xxx 表示定义一个保存点,在一个事务中可以有多个保存点。
  6. Release savepoint xxx 表示删除一个保存点,当没有该保存点的时候执行该语句,会抛出一个异常。
  7. rollback to [savepoint] xxx 表示回滚到某个保存点。

1.3 事务的生命周期

  1. 开启事务,开始执行此事务
  2. 创建日志文件
  3. 执行业务逻辑 commit (根据实际的sql写入日志文件,但并没有运行sql语句)
  4. 刷新日志文件
  5. 最终执行sql环节,数据写入磁盘
  6. 写入 CKP 日志文件,数据的校验保证一致性

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!