浅谈数据库事务

本文详细解读了数据库事务的ACID特性,重点介绍了MySQL的四种隔离级别:ReadUncommitted、ReadCommitted、RepeatableRead和Serializable,并讨论了它们在并发环境中的应用和各自的问题。
摘要由CSDN通过智能技术生成

一、概念:

数据库事务是DBMS执行操作的逻辑单元,具有ACID四大特性:

1、Automicity(原子性):一个事务中的所有修改要么完全执行成功,要么完全不执行。

2、Consistence(一致性):在一个事务执行之前和执行之后,数据库必须处于一致性状态。如果事务提交成功,那么相关操作都必须能够正确地应用于数据库;如果事务中出现错误,那么数据库中相关的所有变化必须要能够正确地回滚,使得回到初始状态。

3、Isolation(隔离性):在并发环境中,当多个事务同时操作同一个数据时,每个事务都具有各自的独立完整的数据空间

4、Duration(持久性):一旦事务被成功提交,那么它对数据库的更新就必须被永久保存,即便数据库遇到故障,在恢复正常运行后,依然能够保持事务成功完成时的状态。

其中隔离性理解起来比较复杂。

二、事务4个隔离级别(从低到高):

1、Read Uncommitted(读未提交):事务可读取其他事务未提交的数据。可能出现脏读的问题,即读到了别的事务回滚前的脏数据

2、Read Committed(读提交):必须等待其他事务修改(UPDATE)提交后,事务才可读取数据。解决了脏读的问题,但是还是存在不可重复读的问题,即当事务先进行了一次数据读取,然后再次读到的数据是别的事务已经修改成功的数据,导致两次读取到的数据不一致

3、Repeatable Read(可重复读):在开启事务时,不再允许其他事务的修改(UPDATE)操作。可以解决不可重复读的问题,但是如果其他事务有INSERT操作,则依然难以避免幻读的问题,所谓幻读就是前后读取到的数据条目不一致

4、Serializable(序列化):所有事务串行执行。可避免脏读、不可重复读、幻读等所有问题,但对性能影响很大(尤其在较高并发场景下),一般不使用。

三、常用数据库默认的事务隔离级别

1、Oracle:Read Commited,可避免脏读,存在不可重复读和幻读的问题。

2、MySQL:Repeatable Read,可避免脏读、不可重复读,不可避免幻读的问题。

(1)查询MySQL当前会话事务隔离级别:

(2)查询MySQL全局事务隔离级别:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值