0
点赞
收藏
分享

微信扫一扫

MySQL事务基础知识

大自然在召唤 2022-03-12 阅读 127

目录

1.数据库事务概述

1.1 存储引擎支持情况

1.2 事务基本概念

1.3 事务的ACID特性

1.4 事务的状态

2.如何使用事务

3.事务的隔离级别

4.事务的常见分类


1.数据库事务概述

1.1 存储引擎支持情况

        可以使用 SHOW ENGINES 命令查看MySQL支持事务的存储引擎有哪些

1.2 事务基本概念

事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态

事务处理的原则:保证所有事物都作为一个工作单元来执行,即使出现了故障,都不能改变这汇总执行方式。当在一个事务中执行多个操作时,要么所有的事务都被提交,那么这些修改就永久地被保存了下来;要么数据库将放弃所作的所有修改,整个事务回滚到最初状态。

1.3 事务的ACID特性

        原子性是指事务是一个不可分割的工作单位,要么全部提交,要么全部失败回滚。        

        根据定义,一致性是指事务执行前后,数据从一个合法性状态变换到另一个合法性状态。这种状态是语义上的而不是语法上的,和具体的业务有关。

        合法状态:满足预定约束的状态就叫做合法状态。简单来说,这个状态是由具体业务来定义的。满足这个状态,数据就是一致的,否则就是不一致的。如果事务中某个操作失败了,系统就会自动撤销当前正在执行的事务,返回到事务操作之前的状态。

        举例1:A账户有200元,转给B300元,此时A账户余额-100元。我们自然就会发现数据是不一致的,因为我们人为定义了一个状态,账户余额不能 < 0。

        举例2:A账户有200元,转50给B,A账户减少了200元,但B账户因为各种意外,余额并没有增加。此时我们也知道数据时不一致的,因为我们人为的定义了一个状态,A+B的总余额必须不变。

        一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

        一个事务一旦被提交,此事务对数据库中数据的改变就是永久性的,接下来其他操作和数据库故障不应该对其有任何影响。

        持久性是通过事务日志来保证的。日志包括重做日志回滚日志。当我们通过事务对数据进行修改的时候,首先会将数据的变化信息记录到重做日志中,然后再对数据库中对应的行进行修改。这样即使数据库系统崩溃,数据库重启后也能找到没有更新到数据库中的重做日志,继而重新执行,使事务具有持久性。

        总结:原子性是基础,隔离形是手段,一致性是约束条件,持久性是我们的目的。

1.4 事务的状态

        事务对应的数据库操作正在执行过程中时,我们就说该事务处在活动的状态

        当事务中最后一个操作执行完成,所造成的影响还没有被刷新到磁盘时,我们就说该事务处在部分提交的状态。

        当事务处在活动的部分提交的状态时,可能遇到了某些错误(数据库自身错误,操作系统错误,外界环境因素等)而无法继续执行,或人为的停止当前事务的执行,我们就说该事务处在失败的状态。

        如果事务执行了一部分而转变为失败的状态,那么就需要把已经修改的事务中的操作还原到事务执行前的状态,我们把这个过程称为回滚。当回滚结束后,我们就说该事务处在中止的状态。

        当一个处在部分提交的状态的事务将修改过的数据都同步到磁盘上后,我们就说该事务处在提交的状态。

状态图如下:

 

2.如何使用事务

3.事务的隔离级别

4.事务的常见分类

举报

相关推荐

0 条评论