知识贴:数据库事务的四大特性

Posted 我们全都爱学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识贴:数据库事务的四大特性相关的知识,希望对你有一定的参考价值。

通常我们说数据库事务的四大特性主要是指ACID四个特性。


  • 1. 原子性(Atomicity)


原子性是指事务包含的所有操作要么全部成功,要么全部失败;不会存在部分成功的场景。


  • 2. 一致性(Consistency)


一致性是指事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。保证数据库一致性是指当事务完成时,必须使所有数据都具有一致的状态。


  • 3. 隔离性(Isolation)


隔离性是指当多个事务并发访问数据库时,数据库必须保证任何一个事务都不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。即达到一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。


事务隔离性的四个级别,从低到高分别为:


  • (1). READ UNCIMMITTED(未提交读)


事务中的修改,即使没有提交,其他事务也可以看得到;这种级别的隔离,实际上是没有隔离,这就是脏读。


  • (2). READ COMMITTED(提交读)


在一个事务开始的时候,只能看到已经完成的事务的结果,正在执行的事务是无法被其他事务看到的。(这是Oracle数据库默认的隔离级别)。这种级别的事务解决了脏读的问题,但是会出现读取旧数据的现象,也就是不可重复读。


例如A在网上购票,查询发现还剩最后一张,窃喜,马上掏钱购买,结果购买失败,票没了;原因是B也差不多同时在网上购票,只是在A掏钱之前快了0.01秒抢到票了。


所谓不可重复读,是指第一次读取发现的事务状态(有票),在同一个事务里再次读取时发生了改变(变成没票了),因为在第一次读和第二次读之间,数据的状态(票)被别的事务修改过了。


  •  (3).REPEATABLE READ(可重复读)

  

确保事务可以多次从一个字段中读取相同的值,在此事务持续期间,禁止其他事务对此字段的更新,可以避免脏读和不可重复读的问题,保证同一条数据的一致性,但是不能保证幻行的问题,即新插入的数据。


这种级别的事务隔离,可以解决上述购票的问题,当A在网上购票时,查询发现还剩最后一张的时候事务就开始,阻止后面的事务再对这张票做任何操作。


幻行:是指突然出来的行数据,指的是某个事务在读取某个范围的数据,但是另一个事务又向这个范围的数据去插入数据,导致多次读取的时候,数据的行数不一致。


  • (4).SERIALIZABLE(可串行化)


这是最高级别的隔离,通过强制事务串行执行,避免前面的各种情况;但是正是由于它大量的加锁,会导致事务等待请求超时,因此性能会有很大损失;通常适用在数据一致性要求高,而并发量不高的场景下才考虑这个隔离级别。


# 事务级别 脏读 不可重复读 幻读
1 Read  uncommitted
2 Read  committed X
3 Repeatable  read X X
4 Serializable X X X


  • 4. 持久性(Durability)

    

持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。


以上是关于知识贴:数据库事务的四大特性的主要内容,如果未能解决你的问题,请参考以下文章

学习数据库四大特性及事务隔离级别

黑马day11 事务的四大特性

数据库事务的四大特性及事务隔离级别

数据库事务的四大特性和事务隔离级别

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

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