作者:sds家的 | 来源:互联网 | 2023-10-12 13:57
一、四大特性(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(串行化):在读取每一行数据都加锁,所以可能导致大量的超时和锁争用问题