MySQL阅读笔记——12.事务

  数据库事务是一组完整的行为,如果成功全部成功,失败则全部失败。缺点是在事务中,不能根据前置条件决定是否向下执行(事务可切分)。

12.1 事务特性

  在OLTP数据库中强调 强一致性 因此提出了ACID原则

  1. 原子性(Atomicity): 事务中的所有操作为一个完整的整体,不可拆分

  2. 一致性(Consistency):主要体现在缓存数据和持久化磁盘的数据是否一致

  3. 隔离性(Isolation): 一个事务执行过程中,不能对其他事务产生影响,即事务之间保持一定的执行顺序

  4. 持久性(Durability):事务执行后对数据库的操作是永久性的,即使断电能意外也可恢复

在OLAP或者分布式场景下,强调 最终一致性 ,提出了 一致性(Consistency)可用性(Availability)分区容错性(Partition ) 原则 和 基本可用(Basically Available)软状态(Soft-state)最终一致性(Eventual consistency) 理论

12.2 事务状态

  1. 活动的(active):事务正在执行中

  2. 部分提交的(partially committed):事务执行完成,但没有刷新的磁盘

  3. 提交的(committed):事务执行完成,并且数据同步到磁盘

  4. 失败的(failed):活动的 或者 部分提交的 事务出现错误,无法继续执行

  5. 中止的(aboted):回滚 执行完毕

12.3 事务操作

  MySQL中支持事务的引擎置是 InnoDBNDB ,通过show variables like 'autocommit' 查看是否开启事务自动提交(默认开启),开启状态下,每一条语句都算一个独立事务。当我们通过BEGIN或者START TRANSACTION语句显示定义事务时,可以 暂时关闭自动提交

隐式提交事务情况:

  1. 执行DDL语句

  2. 修改/删除表

  3. 开启另外一个事务会隐式提交上一个事务

  4. 开启自动提交时,会隐式提交前面定义的所有事物

  5. 使用 lock tablesunlock tables锁定语句

  6. 使用load data等语句加载数据

  7. 主从复制的一些语句,如:start slavestop slaverest slavechange master to

  8. analyze tablecache indecheck tableflushload index into cache`optimize tablerepair tablereset

-- 定义事务
begin
[语句...]
commit / rollback
-- 创建保存点
savepoint <保存点名称>
-- 回滚到指定保存点
rollback to <保存点名称>
-- 删除保存点
release savepoint <保存点名称>

posted @ 2020-10-08 23:50  摩诃、  阅读(135)  评论(0编辑  收藏  举报