数据库事务

本文详细介绍了数据库事务的概念,包括其四大特性:原子性、一致性、隔离性和持久性。讨论了在事务隔离性缺失时可能出现的脏读、不可重复读和幻读问题,并给出了相应的解决方案。同时,提到了MySQL的事务隔离级别及其对这些问题的处理。此外,还分享了关于MVCC(多版本并发控制)和其在MySQL中的实现原理的链接,帮助读者深入理解事务管理。
摘要由CSDN通过智能技术生成

一、什么是事务?

事务是一次或多次对数据进行DML(增、删、改)操作的执行单元

二、事务的特性?

ACID

1、原子性:

一个事务中所有对数据库的DML操作,作为一次对数据的修改,要么所有的DML操作成功,要么所有的DML操作失败

2、一致性:

一个事务对数据的实际操作和业务逻辑是一致的;经典例子:银行转账(A转给B200元,A的账户少200,B的账户多200)

3、隔离性:

在多个事务并发执行的时候,事务与事务之间是相互隔离,不产生影响的

4、持久性:

一个事务的提交,对数据的影响是永久的;这里分为两种情况:

(1)事务提交后,数据直接从内存更新到磁盘中,实现永久保存

(2)事务提交后,数据更改的详细从内存保存到磁盘中(redo log和bin log)

三、当事物之间没有隔离性可能存在的问题

1、修改覆盖:

A事务和B事务读取相同数据,并进行修改,A事务先提交B事务再提交,然后A事务的操作被覆盖

解决修改覆盖问题是使用排他锁

悲观锁、乐观锁;共享锁,排他锁icon-default.png?t=M0H8https://www.jianshu.com/p/d2ac26ca6525

2、脏读:

A事务中对同一部分数据进行前后两次读取;在A事务第一次读取之前B事务对数据进行修改,在A事务第一、二次读取之间B事务对修改的数据进行回滚操作;事务A第一次和第二次的读取数据是不同的(一个事务读取了另一个事务未提交的操作修改的数据)

3、不可重复读

一个事务前后两次读取相同数据,另一个事务在这期间提交了对数据的修改,导致前一个事务两次的读取结果不一致

解决不可重复读需要锁住所有满足条件数据的行

4、幻读

一个事务前后两次读取相同条件下的数据,另一个事务在这期间提交了对数据的增加或者删除,导致前一个事务两次读取的结果不一致

解决幻读需要锁住整张表

不可重复读和幻读不同之处在于一个是对数据的修改,另一个是对数据的增加或者删除

三、Mysql的事务隔离级别

1、读未提交 隔离问题都解决不了

2、读已提交 可以解决脏读

3、可重复读 可以解决脏读、不可重复读 MySQL默认隔离级别

非常好的一篇可重复读深入解读的文章https://blog.csdn.net/qq_32573109/article/details/98610368

MySQL的MVCC及实现原理https://www.cnblogs.com/xuwc/p/13873611.html​​​​​​​

4、串行读 可以解决脏读、不可重复读、幻读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值