MySQL中事务详解

MySQL中事务详解

事务

事务是由单独单元中一个或多个SQL语句组成的,在这个单元中,每个SQL语句都是相互依赖的,也就是相互之间有关系。而整个单元作为一个不可分割的整体,如果其中某条SQL语句执行失败或者产生错误,那么整个单元将进行回滚,所有受到影响的数据将回到事务开始之前的状态,;如果单元的所有SQL语句都执行成功,那么这个事务就被顺利执行了。

存储引擎

在MySQL中,将数据用各种不同的存储技术存储到文件或者内存中,这个就称为存储引擎,也被称为表类型。
MySQL支持的存储引擎很多,可以在MySQL客户端输入以下命令查看详细信息

show engines;

在这里插入图片描述
可以看到MySQL默认使用的是innoDB存储引擎,该引擎支持的功能相对其他存储引擎多一些,性能比较均衡,也支持事务操作。另外经常使用的还有MyISAM、MEMORY存储引擎,其中MyISAM引擎对数据的读写性能非常高,但是不支持事务操作;MEMORY引擎是将数据存储在内存中的,所以性能很高,但是因为存在内存中所以安全性相对较低,建立的表也不能太大,同样也不支持事务。

事务的ACID特性

ACID即Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)。

原子性(Atomicity)

原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

一致性(Consistency)

事务必须使数据库从一个一致性状态变换到另外一个一致性状态。

隔离性(Isolation)

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

持久性(Durability)

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

开启事务的步骤

事务有两种,一种是隐式事务,一种是显式事务。

隐式事务

一般来说,一条insert、update或者delete都是一个隐式事务。你看不到明显的开启事务和结束事务的标记,这是因为默认是自动提交的。你可以使用下面语句查看

show variables where variable_name = 'autocommit';

在这里插入图片描述
可以看到自动提交是开启的。

显式事务

显式事务就是有明显的开启事务和结束事务的标记。
显式事务开启有两种方式:

方式一

1.开启事务

# set autocommit=0;
start transaction;

第一条语句是将自动提交功能在本次会话界面设置为关闭状态,这个状态直到本次会话结束,也就是退出本次MySQL客户端。
第二条语句是开启事务语句,会默认将自动提交功能关闭,但是本次事务结束后就会恢复之前的状态。
所以两句写一个就可以了。
2.编写事务中的SQL语句

# 这里写要执行的SQL语句

3.结束事务

commit;
# rollback;

结束事务就是commit语句提交事务或者rollback语句回滚事务。

方式二

1.开启事务

begin;

2,3步骤同方式一。
两种方式通常使用方式二会比较多一些

事务的隔离级别

为什么要有隔离级别

当多个事务并发时,访问数据库中的相同数据,如果没有隔离级别,就会发生一些问题。
1.脏读
对于两个事务T1,T2,T2更新了一条数据但没有提交,此时T2读取到了T1更新后的数据,如果T1又进行了回滚操作,那么T2读取的数据就是临时且无效的一条数据。
2.不可重复读
对于两个事务T1,T2,T1读取了一条数据,然后T2对这条数据进行了更新且提交,此时T1再去读取那条数据,显示的结果就和之前不一样了。
3.幻读
对于两个事务T1,T2,T1从一张表中读取了一个字段,然后T2在该表中插入并提交了一些新的行,此时T1再去读取那个字段会发现数据多了几行。
其中脏读和幻读很类似,脏读针对的是update操作,幻读针对的是insert操作。

隔离级别分类

1.查看当前隔离级别

select @@tx_isolation;

2.设置隔离级别

set session transaction isolation level serializable;

3.隔离级别避免的问题

隔离级别 脏读 不可重复读 幻读
read uncommitted
read committed X
repeatable read X X
serializable X X X

其中,MySQL默认是第三个隔离级别 repeatable read
oracle默认是第二个隔离级别 read committed

猜你喜欢

转载自blog.csdn.net/qq_36548114/article/details/106983133