事务~~~

1、四大特性:

A 原子性:对数据的一组操作,要么执行成功,要么不执行

C 一致性:事务前后的状态要保持一致,可以理解为数据的一致性

I 隔离性:多个事务之间是隔离的,互不影响

D 持久性:事务中对数据库执行的修改操作都将在磁盘上保留下来

只有保证了原子性、隔离性、持久性才能保证事务的一致性。

2、事务的状态:

  • 活动的(active):事务对应的数据库操作正在执行过程中时,我们就说该事务处在活动的状态。
  • 部分提交的(partially committed):当事务中的最后一个操作执行完成,但由于操作都在内存中执行,所造成的影响并没有刷新到磁盘时,我们就说该事务处在部分提交的状态。
  • 失败的(failed):当事务处在活动的或者部分提交的状态时,可能遇到了某些错误(数据库自身的错误、操作系统错误或者直接断电等)而无法继续执行,或者人为的停止当前事务的执行,我们就说该事务处在失败的状态。
  • 中止的(aborted):如果事务执行了半截而变为失败的状态,比如我们前边唠叨的狗哥向猫爷转账的事务,当狗哥账户的钱被扣除,但是猫爷账户的钱没有增加时遇到了错误,从而当前事务处在了失败的状态,那么就需要把已经修改的狗哥账户余额调整为未转账之前的金额,换句话说,就是要撤销失败事务对当前数据库造成的影响。书面一点的话,我们把这个撤销的过程称之为回滚。当回滚操作执行完毕时,也就是数据库恢复到了执行事务之前的状态,我们就说该事务处在了中止的状态。
  • 提交的(committed):当一个处在部分提交的状态的事务将修改过的数据都同步到磁盘上之后,我们就可以说该事务处在了提交的状态。

随着事务对应的数据库操作执行到不同阶段,事务的状态也在不断变化,一个基本的状态转换图如下所示:

从图中大家也可以看出了,只有当事务处于提交的或者中止的状态时,一个事务的生命周期才算是结束了。对于已经提交的事务来说,该事务对数据库所做的修改将永久生效,对于处于中止状态的事务,该事务对数据库所做的所有修改都会被回滚到没执行该事务之前的状态。

3、事务的原理:

  • 使用undo log(回滚日志)保证事务的原子性
  • 使用redo log(重做日志)保证事务的持久性
  • 使用锁机制、MVCC等手段保证事务的隔离性
相关推荐
卡尔特斯4 分钟前
MySQL 字符集与排序规则总结
mysql
luoluoal6 分钟前
基于python的RSA算法的数字签名生成软件(源码+文档)
python·mysql·django·毕业设计
@zulnger9 分钟前
Python 连接 MySQL 数据库_pymysql
数据库·python·mysql
别来无恙blwy14 分钟前
SQL Server高可用自动故障转移失败(短时间内多次转移失败,只需一步可处理)
数据库·windows·sqlserver·负载均衡·可用性测试
gjc5921 小时前
MySQL 主从复制全解析:从基础原理到高级实战简介(附架构图)
数据库·mysql
kong79069281 小时前
MySQL的安装与卸载
数据库·mysql
JIngJaneIL1 小时前
基于java+ vue办公管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
tq10861 小时前
回到原点再出发2
数据库
iVictor1 小时前
MySQL 在哪些场景下不会写 binlog
mysql
minhuan1 小时前
大模型应用:与传统数据库融合:打造关系型数据库MySQL的向量检索能力.31
数据库·mysql·mysql的向量检索·向量模型应用