数据库——事务

本文介绍了数据库事务的基本概念,包括原子性、一致性、隔离性和持久性。详细探讨了事务在并发环境中的问题,如脏读、不可重复读和幻读,并分析了不同隔离级别的作用。最后强调,选择何种隔离级别应根据具体业务需求来确定。
摘要由CSDN通过智能技术生成

事务是数据库中一组最小的运行单元。其他不管包含了多少SQL语句都具备要么一起成功,要么一起失败的特点。

事务的特性

名称描述
A(原子性)原子性就是指事务是一个不可以分割的工作单元。事务中的操作要么都发生,要么都不发生。
C(一致性)事务前后数据的完整性必须保持一致
I(隔离性)事务的隔离性发生在多线程高并发的情况下。数据库会给每个客户端开启一个事务,A客户端对数据库的操作不会被其他客户端干扰。这就是各个事务之间相互隔离。
D(持久化)事务一旦提交就变为了不可逆状态。数据已经进行了IO操作。对于本次事务来说,数据已经是不可逆状态。

事务的并发问题

问题名称描述
脏读一个事务读取到了另外一个事务未提交的数据
不可重复读在一个事务中读取表内的一行数据,多次读取的结果不同
幻读(虚读)一个事务中读取了其他数据插入的数据,导致前后读取不一致

隔离级别

在数据库中为了保证并发情况下读取数据的正确性,数据库本身提供了事务隔离级别。
读未提交:一个事务可以读取到其他事务未提交的数据,这种隔离级别下,所有的查询都不加锁,一致性最差。

    注意:如果设置成此隔离级别那么上述的三个问题都会出现。
    
读已提交:一个事务只能读取到其他事务已经提交的数据。这种隔离级别可以解决脏读的问题。但是不可重复读和幻读问题还是可能出现、

    注意:绝大部分数据库默认的都是此隔离级别(oracle)。但是mysql不是、    
    
可重复读:事务在执行过程中可以读取到其他事务已经提交的数据。但是不能读取其他事务对数据的修改、此隔离级别可以解决脏读和不可重复读问题。但是还是可能出现幻读问题
    
    注意:mysql默认的此种隔离级别
    
串行化:并发的事务使用串行化的方式执行。一个事务执行,其他事务等待。此种隔离级别可以避免上述三个问题。但是并发能力太差(效率太低)

总结:具体使用那种隔离级别根据业务定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值