Mysq --事务基础篇讲解

目录

一.事务的基本定义

二 .事务的并发问题

三.事务的隔离级别

一.事务的基本定义

事务:一组操作的集合,这组操作哟啊么全部执行成功,要么全部执行失败

--开启事务

START TRANSACTION

--提交/回滚事务

COMMIT / ROLLBACK;

事务四大特性ACID:

原子性:Atomicity        事务是最小操作单位,要么全部完成要么全部失败

一致性:Consistency   事务完成时所有数据保持一致状态

隔离性:Isolation        事务不受外部并发操作的影响再独立环境下运行

持久性:Durability       事务一旦提交或回滚,对数据库的改变是永久的

--查看事务隔离级别

SELECT @@TRANSACTION_ISOLATION

SET [SESSION|GLOBAL] TRANSCTION ISOLATION LEVEL {四种隔离级别}

--四种隔离级别:

读未提交:READ UNCOMMITTED

读已提交:READ COMMITTED

可重复读:REPEATABLE READ

串行化:SERIALIZABLE

二. 并发事务问题

1.脏读:事务B读取到事务A还没有提交的事务

例如: 对数据进行如下操作:

1.事务A进行了更新操作(insert)但未提交,未提交所以数据应该未改变

2.事务B读取(select)的数据应该是事务A 插入(insert)前的数据

3.但如果事务B读取到了未提交的事务A进行插入操作后的数据,这就叫做脏读

2.不可重复读:一个事务先后读取同一条记录,但两次数据不同

不可重复读和脏读不同因为:

脏读是读取数据,但这次数据被其他未提交事务修改了,读到的却是其他事务提交后的数据。

不可重复读却是读取数据时有事务A进行了数据修改且事务提交了,所以会导致事务B在提交前读取了两次数据,读取事务A提交前的数据和事务A提交后的数据是同一个数据但数据不一致。

3.幻读:一个事务按照条件查询时,没有对应的数据,但在插入数据时,这行数据又存在了

如前两个事务一样,这是由于并发性事务引起的问题。事务A在查询时事务B在进行插入操作。事务B插入完了事务A还没有提交完,这时事务A再进行插入就会发现已存在数据,因为这个数据已经被事务B插入了。

三. 并发事务隔离级别(从上到下事务严格度逐渐增加,性能逐渐降低)

事务隔离级别
隔离级别脏读不可重复读幻读
读未提交
读已提交×
可重复读××
串行化×××

如上所示,不同的隔离级别可以解决不同的并发事务问题:

1.读已提交可以读到其他还未提交的事务所以很容易出现脏读。

2.读已提交就可以解决脏读问题因为只读已经提交的事务但仍然可能存在不可重复读和幻读问题。

3.可重复读就不会出现不可重复读问题,其他事务修改读取到的还是其他事务提交前的数据。

4.而串行化就是一个数据一次只能由一个事务操作,不然就会一直卡住等到其他事务完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值