MySQL 学习记录
本文最后更新于:3 年前
MySQL 记录
1.1 事务的特性(ACID)
- 事务要求 ACID 的特性,即:原原子子性性、、一一致致性性、、隔隔离离性性、、持持久久性性。
- 所谓原子性,是指整个数据库的每个事务都是不可分割的单位。只有事务中的所有 SQL 语句都执行成功,才算整个事务成功,事务才会被提交。如果事务
中任何一个 SQL 语句执行失败,整个事务都应该被回滚。 - 所谓一致性,是指将数据库从一种一致性状态转换为下一种一致性状态。不允许数据库中的数据出现新老数据都有的情况,要么都是老数据,要么都是新数
据。用更书面化的表达就是:数据的完整性约束没有被破坏。 - 所谓隔离性,是指一个事务的影响在该事务提交前对其他事务都不可见,它通过锁机制来实现。
- 所谓持久性,是指事务一旦被提交,其结果就是永久性的。即使发生宕机等故障,数据库也能将数据恢复。
1.2 事务的语法
- 在 MySQL 命令行的默认设置下,事务是自动提交的,即执行了SQL 语句之后会马上执行 commit 操作,我们可以设置 set autocommit=0 来禁用当前回话
的自动提交。 - 还可以用 begin 、start transaction 来显式的开始一个事务。
- Commit 在默认设置下是等价于 commit work 的,表示提交事务。
- rollback 在默认设置下等价于 rollback work,表示事务回滚。
- savepoint xxx 表示定义一个保存点,在一个事务中可以有多个保存点。
- Release savepoint xxx 表示删除一个保存点,当没有该保存点的时候执行该语句,会抛出一个异常。
- rollback to [savepoint] xxx 表示回滚到某个保存点。
1.3 事务的生命周期
- 开启事务,开始执行此事务
- 创建日志文件
- 执行业务逻辑 commit (根据实际的sql写入日志文件,但并没有运行sql语句)
- 刷新日志文件
- 最终执行sql环节,数据写入磁盘
- 写入 CKP 日志文件,数据的校验保证一致性
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!