MySql事务详解

本文详细解析了数据库事务的ACID特性,包括原子性、一致性、隔离性和持久性,以及事务在并发操作中可能遇到的丢失更新、脏读、不可重复读和幻读等问题。介绍了四种隔离级别的特点及其实现机制。

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

因为实际中一个数据库是很多个用户操作的,所以就有了事务这么个东西。一个或者多个数据库操作构成了一个事务。事务的属性有ACID

A(原子性)

每个事务都是一个不可分割的单元,事务中的一个部分没完成,事务就不会成功。

C(一致性)

若是从系统中删除一个员工,那么所有与该员工相关的包括工资等都要被删除。MySql中一致性由日志来保证,事务处理中间发生错误,MySql需要恢复如初,日志为数据恢复提供了跟踪记录。一致性保证了数据从不返回一个未处理完的事务。

I(隔离性)

事务之间是不发生关系的。绝对隔离性,任意时刻只有一个用户访问数据库,不现实。使用页锁和行锁,隔离不同事务。

D(持久性)

通过日志实现,rdb文件记录所有操作,保证了即使系统突然宕机也可以很好的记录下宕机前的操作。

关于并发访问数据库的问题

丢失更新: 多个事务选择同一行更新,每个事务不知道其他事务存在,最后的更新就是每个事务都重写其他事务所作的更新,可能造成书库丢失
脏读:一个事务读取到别的事务还没提交的更新数据,这就是脏数据
不可重复读:一个事务多次访问同一行读取到不一样的数据成为不可重复读。
幻读:一个事务对某行插入删除,另一个事务在读取这一行。

每一个事务都有隔离级,这样保证了数据库的一致性。数据库提供了四种隔离级:

序列化(SERIALIZABLE)
可重复度(REPEATABLE READ)
提交读(READ COMMITED)
未提交读(READ UNCOMMITED)

序列化提供了最大限度的隔离,用户之间一个接一个顺序执行当前事务

可重复读中,同一个事务中的同一条select结果总是相同的,即你不能在一个事务中看到别的事务的操作,MySql默认这个

提交读 处于这一级的事务可以看奥其他事务的操作,即这一级别同一个事务中的同条select结果可能不同
未提交读 这是最小限度的隔离。可能会有幻读和不可重复读

隔离级别越高,性能越低

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值