1.事务(Transaction)

事务一般是指数据库事务, 是基于关系型数据库(RDBMS)的企业应用的重要组成部分。在软件开发领域,事务扮演者十分重要的角色,用来确保应用程序数据的完整性和一致性。也就是要么完全执行,要么完全不执行。

事务允许我们将几个或一组操作组合成一个要么全部成功、要么全部失败的工作单元。如果事务中的所有操作都执行成功,那就是最终我们想要的正确的结果。但如果事务中的任何一个操作失败,那么事务中所有的操作都会被回滚,已经执行成功操作也会被完全还原,结果就跟操作之前一样。

很经典的例子就是银行转账操作, A转账给B500元, 如果A先转出去了500, 此时A的账户就少了500, 接下来就应该给B账户添加500元了, 但是很不巧此时程序出现了问题导致操作终止了, 这时候还没有给B账户加上500, 但是A却已经少了500元了, 这样就出现了问题. 所以就有了事务管理

事务管理的意义:保证数据操作的完整性。

而事务管理的四大特性就是ACID!

2.事务的ACID

事务的四个特性, 也就是ACID分别是: 原子性、一致性、隔离性 和 持久性

2.1.原子性(Atomicity)

事务的整个操作是一个整体,不可以分割,要么全部成功,要么全部失败。

例如: 上面的转账操作, A转出, B转入, 这虽然是两个操作, 但却应该是一个整体, 整体操作要么成功, 要么不成功(A也不会少那500元), 不能A转出了500, B却没有转入, 这就不是一个整体了.

2.2.一致性(Consistency)

事务必须保证数据库从一个一致性状态变到另一个一致性状态,一致性和原子性是密切相关的。

例如: 上面的转账操作, 账户A和B, 在操作之后, 应该要么都是转账前的状态(A没有转出500, B也没有收到500), 要么就都是转账后的状态(A转出了500, B转入了500), 不能A转出了500, B却没有转入500. 可以看出, 这里的一致性和原子性紧密结合的.

2.3.隔离性(Isolation)

一个事务的执行不能被其它事务干扰,即一个事务内部的操作及使用的数据对并发的其它事务是隔离的,并发执行的各个事务之间不能互相打扰。

例如: 上面的转账操作, 虽然A和B转账操作的那个时间段, 会有很多其他人也在转账(可能也会牵扯到A和B账户), 但是每个人的转账都是自己个事务中, 彼此之间不会影响

2.4.持久性(Durability)

持久性也称为永久性,指一个事务一旦提交,它对数据库中数据的改变就是永久性的,后面的其它操作和故障都不应该对其有任何影响。

例如: A和B的转账操作完成后(事务提交), 此时A就会少了这500, B也就多了500, 不会改变了(除非继续操作账户), 此时不管系统崩了还是银行断电, 账户里的钱都不会改变了

最新文章

  1. 琴弦文字 - wpf行为
  2. RabbitMQ学习
  3. node.js的优缺点
  4. [2014.01.27]WFsoft.wfLibrary.wfIniFile 1.5
  5. UITableViewDataSource协议
  6. css兼容各个浏览器的三角形图标
  7. mysqldump 数据库迁移并改换engine
  8. Http Response Code
  9. linux/unix 段错误捕获【续】
  10. A2W和W2A :很好的多字节和宽字节字符串的转换宏
  11. CSS背景图片定位
  12. Bat脚本命令说明
  13. Fabric动态增加组织【资料】
  14. jmeter插件安装
  15. 025 SSM简单搭建
  16. PHP 重置数组为连续数字索引的几种方式
  17. NPOI 创建Excel 设置宽度 样式 颜色对比表
  18. vue的v-model绑定数据问题
  19. 高质量JavaScript代码
  20. C#多线程List的非线程安全性

热门文章

  1. Kubernetes(k8s)控制器(一):deployment
  2. elk引入redis
  3. Nginx06 Rewrite
  4. JDBC工具类,减少代码冗余好帮手
  5. P31_全局配置 - window - 设置上拉触底的距离
  6. 《关于我因为flink成为spark源码贡献者这件小事》
  7. Unreal 各种指针类型是怎么回事
  8. 黑马Mybatis快速入门
  9. Cesium JulianDate(十八)
  10. Vue学习:实现用户没有登陆时,访问后自动跳转登录页面