如何理解数据库中事务的原子性?
2017-10-11 21:26
197 查看
什么是原子性,什么是原子性操作?
举个例子:
A想要从自己的帐户中转1000块钱到B的帐户里。那个从A开始转帐,到转帐结束的这一个过程,称之为一个事务。在这个事务里,要做如下操作:
1. 从A的帐户中减去1000块钱。如果A的帐户原来有3000块钱,现在就变成2000块钱了。
2. 在B的帐户里加1000块钱。如果B的帐户如果原来有2000块钱,现在则变成3000块钱了。
如果在A的帐户已经减去了1000块钱的时候,忽然发生了意外,比如停电什么的,导致转帐事务意外终止了,而此时B的帐户里还没有增加1000块钱。那么,我们称这个操作失败了,要进行回滚。回滚就是回到事务开始之前的状态,也就是回到A的帐户还没减1000块的状态,B的帐户的原来的状态。此时A的帐户仍然有3000块,B的帐户仍然有2000块。
我们把这种要么一起成功(A帐户成功减少1000,同时B帐户成功增加1000),要么一起失败(A帐户回到原来状态,B帐户也回到原来状态)的操作叫原子性操作。
如果把一个事务可看作是一个程序,它要么完整的被执行,要么完全不执行。这种特性就叫原子性。
举个例子:
A想要从自己的帐户中转1000块钱到B的帐户里。那个从A开始转帐,到转帐结束的这一个过程,称之为一个事务。在这个事务里,要做如下操作:
1. 从A的帐户中减去1000块钱。如果A的帐户原来有3000块钱,现在就变成2000块钱了。
2. 在B的帐户里加1000块钱。如果B的帐户如果原来有2000块钱,现在则变成3000块钱了。
如果在A的帐户已经减去了1000块钱的时候,忽然发生了意外,比如停电什么的,导致转帐事务意外终止了,而此时B的帐户里还没有增加1000块钱。那么,我们称这个操作失败了,要进行回滚。回滚就是回到事务开始之前的状态,也就是回到A的帐户还没减1000块的状态,B的帐户的原来的状态。此时A的帐户仍然有3000块,B的帐户仍然有2000块。
我们把这种要么一起成功(A帐户成功减少1000,同时B帐户成功增加1000),要么一起失败(A帐户回到原来状态,B帐户也回到原来状态)的操作叫原子性操作。
如果把一个事务可看作是一个程序,它要么完整的被执行,要么完全不执行。这种特性就叫原子性。
相关文章推荐
- 如何理解数据库事务?我的回答是:
- 如何理解数据库事务隔离级别
- 如何理解数据库事务中的一致性的概念?
- [MySQL]数据库中如何处理多事务
- 关于数据库事务、隔离级别、锁的理解与整理
- SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因
- SQL Server 2000数据库的事务日志文件过大,如何将其缩小?
- [Sqlite]-->嵌入式数据库事务理解以及实例操作
- 如何理解事务的脏读,不可重复读,幻影读
- 4000 事务如何理解
- 如何保证数据库同步中目的端交易提交的原子性
- 多角度彻底理解数据库事务中的"脏读"."不可重复的读"及"虚读"
- SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因
- 数据库事务的理解
- 【数据库-Azure SQL Database】如何创建事务复制将本地数据同步到 SQL Azure
- Entity Framework 4.1延时加载与贪婪加载之我的理解和数据库中如何存入图片
- 数据库事务的四大特性、隔离级别以及Spring中如何利用AOP进行事务管理
- 如何理解oracle实例(instance)和数据库(database)的概念
- 数据库-如何理解第一范式、第二范式、第三范式;1NF,2NF,3NF,BCNF
- 如何在数据库事务提交成功后进行异步操作