一、简述
事务的四大特性为原子性,一致性,隔离性,持久性,其概念分别如下:
⑴ 原子性(Atomicity)
原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
⑵ 一致性(Consistency)
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
⑶ 隔离性(Isolation)
隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。
⑷ 持久性(Durability)
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
二、举例说明
这四个概念其实比较抽象,脱离具体事务来讲比较难理解,为了帮助理解,我们可以引用具体的实例帮助我们理解
首先我们创造一张表
一列是用户表,一列是金额表
ID | user | money |
1 | A | 1000 |
2 | B | 1000 |
⑴ 原子性(Atomicity)
比如我们现在有一个任务要让A账户向B账户转100元,那么我们就需要执行两句
第一个是A账户-100第二个是B账户+100
原子性就是保证这两条数据要么都成功要不都不成功,如果成功一般那么就会出现总数多出100或者少100这样就会造成顾客损失或者公司损失,所以出现不成功或者成果一半就要回滚
⑵ 一致性(Consistency)
拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。
⑶ 隔离性(Isolation)
比如一个人A在发出转账请求时,B去同时查看两个账户余额,B要不看见都是转账前的状态 都是1000块,要不看到的都是转账后的状态,一个900一个1100,而不会看到一个900一个1000或者一个1000一个1100这种中间状态。
关于事务的隔离性数据库提供了多种隔离级别,稍后会介绍到。
⑷ 持久性(Durability)
例如我们在使用JDBC操作数据库时,在提交事务方法后,提示用户事务操作完成,当我们程序执行完成直到看到提示后,就可以认定事务以及正确提交,即使这时候数据库出现了问题,也必须要将我们的事务完全执行完成,否则就会造成我们看到提示事务处理完毕,但是数据库因为故障而没有执行事务的重大错误。