Mysql数据库事务

数据库事务确保了在并发环境中操作的原子性和一致性。事务的四大特性包括原子性、一致性、隔离性和持久性。常见的事务隔离级别有读未提交、读已提交、可重复读和串行化,每个级别都有其优缺点,需要根据实际需求平衡性能和可靠性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是事务

数据库事务,是指为了完成某个业务对数据库进行一系列操作(通常是增删改操作),这些操作要么都完成,要么都失败。

举例:张三转账给李四的账户500元,这需要两条SQL语句
1).张三的账户要减去500元;

update 账户表 set money=money-500 where name='张三';

2).李四的账户加上500元;

update 账户表 set money=money+500 where name='李四';

此时,如果说在第一条sql语句执行完之后,在执行第二条语句之前,程序因为某种原因出错抛出异常,导致张三的账户少了500元,而李四的账户并没有收到500元,这种情况在生活中是不允许发生的。

如果在转账过程中加入事务,则整个转账过程中执行的所有SQL语句会在一个事务中,而事务中的所有操作,要么全都成功,要么全都失败,不可能存在成功一半的情况。

也就是说给张三的账户减去500元如果成功了,那么给李四的账户加上500元的操作也必须是成功的;否则,给张三减去500元以及给李四加上500元都是失败的。

事务的四大特性

原子性:即事务所涉及的各个操作要么全部成功,要么全部失败。

一致性:事务执行后,数据库状态与其它业务规则保持一致。

隔离性:隔离性是指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不会相互干扰。

持久性:事务提交之后,数据最终会保存在数据库当中(硬盘上)。

事务隔离级别

1)读未提交:一个事务可以读取到另外一个事务尚未提交的数据。该隔离级别可能会产生“脏读”、“不可重复读取”和“幻影读取”问题。
在这里插入图片描述

2)读已提交: 一个事务只能读取到另外一个事务已经提交的数据。该隔离级别解决了“脏读”问题,但是可能会产生“不可重复读取”和“幻影读取”问题。
在这里插入图片描述

3)可重复读取: 在同一个事务当中,多次读取得到的结果一样。该隔离级别解决了“脏读”和“不可重复读取”问题,但是仍然可以能会产生“幻影读取”问题。
在这里插入图片描述

4)串行化:事务不能同时执行,需要一个一个排队。不会产生上述问题了。但是性能太差,不推荐使用。

总结:隔离级别从低到高分别是“读未提交–>读已提交–>可重复读取–>串行化”,隔离级别越高,性能越低,可靠性越高。在实际使用当中,要结合具体的要求来设置具体的隔离级别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值