mysql 事务_小结mysql事务隔离级别

在MySQL的众多数据库存储引擎中,只有InnoDB支持事务,所有这里所说的事务隔离级别指的是InnoDB数据库存储引擎下的事务隔离级别。

mysql的事务隔离级别有以下四种:

1.读未提交:有两个事务,事务A和事务B,事务A中更新了一条数据记录且未提交,事务B可以读取到事务A未提交的数据更改。如果事务B使用了事务A未提交的更改数据,并在此基础上做了数据运算,并更改了数据库,如果事务A发生事务回滚,将会导致数据的不一致的情况出现。简单讲就是一个事务可以读取到另一个事务未提交的修改。这会带来脏读、幻读、不可重复读问题。

55ea4122bc4f4476eccb964a1d7f4eb3.png

2.读已提交(oracle默认的隔离级别):这是很多数据库默认的事务隔离级别,但是不是mysql事务的默认隔离级别,这种隔离级别可以解决脏读的问题,但是无法解决可重复读以及幻读的问题。两个事务,事务A和事务B,事务A更新了某条数据记录并提交更改,事务B在事务A操作该数据之前读取一次数据,然后在事务A更新该数据并提交后再读一次,这样就读到的结果不一样(也称不可重复读)。简单讲就是一个事务只能读取另一个事务已经提交的修改。其避免了脏读,但仍然存在不可重复读和幻读的问题。

3.可重复读(mysql默认的隔离级别):两个事务,事务A和事务B,事务A更新了某条记录并提交,事务B在事务A操作该数据之前读取一次数据,然后在事务A更新该数据并提交后再读一次,读到的结果一样。简单讲就是同一个事务中多次读取相同的数据返回的结果是一样的。其避免了脏读和不可重复读问题,但幻读依然存在。

4.串行化:最高的事务隔离级别,在实际生产环境很少使用,因为这种隔离级别在应对高并发方面性能远远不足。串行化避免了脏读、不可重复读和幻读问题。

通用数据库的事务隔离级别如下图所示,请注意mysql在可重复读下幻读可能性的不同之处(不存在write操作的话就可以避免幻读)

ae72baa4fac3f137c03390c97fa9cbc5.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值