热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据库事务的四大特性(ACID)以及隔离级别

一、四大特性(ACID)数据库事务是访问并可能操作各种数据项的一个数据库操作序列1、原子性Atomicity:事务内包含的所有操作要么

一、四大特性(ACID)

数据库事务是访问并可能操作各种数据项的一个数据库操作序列

1、原子性Atomicity:事务内包含的所有操作要么全部成功,要么全部失败回滚。实现:日志,将所有的更新操作写入日志中,若因为一些原因导致事务中的部分更新操作已经执行,部分操作未执行,则通过回溯日志,将操作回滚

2、一致性Consistency:一个事务执行前和执行后都处于一致性状态。例如:A和B进行转账操作,A有200块钱,B有300块钱;当A转了100块钱给B之后,他们2个人的总额还是500块钱,不会改变

3、隔离性Isolation:当多个用户并发访问数据库时,数据库为每个用户开启一个事务,多个并发事务之间要相互隔离。即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行(隔离性与隔离级别相关)

4、持久性Durability:一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的


二、隔离级别

1、READ UNCOMMITTED(未提交读):事务可以读取未提交的数据,称为脏读

2、READ COMMITTED(提交读):一个事务开始时,只能”看见”已经提交的事务所做的修改,称为不可重复读(Sql Server及Oracle的默认隔离级别)

3、REPEATABLE READ(可重复读):当事务A在读取某个范围内的记录后,事务B又在该范围内插入了新的记录,当事务A再次读取该范围的记录时,会无法查询到新插入的数据,称为幻读MySQL的默认隔离级别

至于产生这种现象的原因,可以简单的理解为:事务A在进行第一次查询操作后,产生了一个数据库的快照,这个快照可以让数据库在进行其他写操作时实现并发读操作。读时不是真正的在读数据库,而是读这个快照。这样做的目的是提高并发效率,但会造成一定的数据误差

详细内容可以了解下MVCC

MVCC底层原理_KKKL的博客-CSDN博客_mvcc多版本并发控制一、简介MVCC(Multi-Version Concurrency Control)多版本并发控制,是用来在数据库中控制并发的方法,实现对数据库的并发访问用的。在MySQL中,MVCC只在读取已提交(Read Committed)和可重复读(Repeatable Read)两个事务级别下有效。其是通过Undo日志中的版本链和ReadView一致性视图来实现的。MVCC就是在多个事务同时存在时,SELECT语句寻找到具体是版本链上的哪个版本,然后在找到的版本上返回其中所记录的数据的过程。首先需要知道https://blog.csdn.net/qq_45404693/article/details/1205064214、SERIALIZABLE(串行化):在读取每一行数据都加锁,所以可能导致大量的超时和锁争用问题


推荐阅读
author-avatar
sds家的
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有