mysql(二) 事务及隔离级别概念相关

102 阅读2分钟

1.事务的定义:
1.1 事务的定义以及相关概念描述:
事务其实就是一组操作(多条DML语句的操作)的集合,他是程序的一个执行单元,事务本身并不包含ACID这4个特性,我们需要让事务满足了ACID,那么我们可以称它为一个事务,或者说是一个成功的事务。

事务的条件ACID:事务若要成功必须满足ACID这四个条件,其中缺一不可!

    原子性(Atomicity): 一个事务的操作要么全部提交成功,要么全部失败回滚,不能只执行其中的一部分操作,这就是事务的原子性

    一致性(Consistency): 事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处于一致性状态。例如: 如果数据库系统在运行过程中发生故障,有些事务尚未完成就被迫中断,这些未完成的事务对数据库所作的修改有一部分已写入物理数据库, 这是数据库就处于一种不正确的状态,也就是不一致的状态

   隔离性(Isolation):事务的隔离性是指在并发环境中,并发的事务时相互隔离的,一个事务的执行不能不被其他事务干扰。不同的事务并发操作相同的数据时,每个事务都有各自完成的数据空间,即一个事务内部的操作及使用的数据对其他并发事务时隔离的,并发执行的各个事务之间不能相互干扰。

   持久性(Durability):  一旦事务提交,那么它对数据库中的对应数据的状态的变更就会永久保存到数据库中。即使发生系统崩溃或机器宕机等故障,只要数据库能够重新启动,那么一定能够将其恢复到事务成功结束的状态。

1.2 事务的分类:
image.png image.png

扁平事务 image.png image.png image.png image.png 由此可知,扁平事务回滚的代价较大,回滚的动作对性能有一定影响

带有保存点的扁平事务 image.png

分布式事务 在分布式应用下各个节点所参与的同一个事务操作。对于分布式事务场景而言 ,mysql需要修改隔离级别为串行化

2.事务的实现:\

2.1 事务日志
事务的隔离性是由锁来实现,原子性、一致性、持久性是通过mysql的redo log和undo log来完成。
redo log:重做日志(保证事务的原子性和持久性)
undo log:回退日志(保证事务一致性,提供回滚和多个行版本控制MVCC)

redo log: image.png image.png

undo log: image.png

2.2 事务控制语句
image.png image.png

2.3 事务隐式提交的sql语句
image.png