事务的四个特性和事务的隔离级别
Posted from-java-to-world
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了事务的四个特性和事务的隔离级别相关的知识,希望对你有一定的参考价值。
什么是事务?
一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。
一个事务可以是一条SQL语句,一组SQL语句或整个程序。
所以说事务是和数据库相关联的,事务的四个特性和事务的隔离级别也是关于数据库的。
事务的四个特性的理解(ACID)
1、原子性(Atomicity)
如果开启一个事务,那么这个事务所包含的sql语句要么全部执行,要么全部不执行,前面说过一个事务可以是一条SQL语句,一组SQL语句或整个程序。
例子:转账事务:A向B转100元,要么A失去100元,B得到100元,转账成功,要么A的100元还在,B没收到A的100元,转账失败
2、一致性(Consistency)
事务对于对于数据库的增删修改操作,要保证数据的一致,
举个例子:转账操作 A账户1000元,B账户没钱,AB之间相互转账,要保证总数是1000元,不可能多了或少了,这就是一致性;说白了就是现实中的数据必须有来源,有去向,不会凭空出现或者消失。
3、隔离性(Isolation)
事务的隔离性也有称作独立性,是指两个以上的事务不会出现交错执行的状态。因为这样可能会导致数据不一致。
4、持久性(Durability)
事务执行成功后,对数据库的修改是永久的,不会无缘无故地回滚。
事务的隔离级别的理解
Read uncommitted(读未提交) 发生了脏读
一个事务可以读取另一个事务未提交的数据
一个事务对数据库做出了修改但是没有提交(commit),这时候我们可以读到(查询到)修改的数据,但是如果这个事务回滚(rollback),我们之前读到的数据就是脏数据,是无效的数据。总的来说这个隔离级别会发生脏读的情况
Read Committed(读已提交) 解决了脏读,发生了不可重复读
一个事务要等到另一个事务提交之后才能读取数据。
例子:A银行卡有100元,这时他的妻子把100元转走了,当A去消费的时候发现卡里的100元没有了
一个事务的范围内两次相同的查询却得到不同的数据,这就是发生了不可重复读
Repeatable Read(可重复读) 解决了脏读和不可重复读,发生了幻读
在一个事务开启的时候就不允许其它事务去做修改的操作。
A事务开启对数据库进行修改,同时B事务在对数据库进行查询,B第一次查询结束的时候A提交了修改,当B再次查询的时候发现两次数据不一样,这就是幻读。
Serializable(序列化) 解决了脏读,不可重复读和幻读
最高的事务隔离级别,代价花费最高,性能很低,很少使用,在此级别下,事务顺序执行,避免上述产生的情况。
以上是关于事务的四个特性和事务的隔离级别的主要内容,如果未能解决你的问题,请参考以下文章