在日常生活中,事务是无时无刻不存在的,什么是事务,按我的理解事务便是执行一段连续的不可分离的操作,这段操作是为了实现某一个目的而执行的,它不存在中间状态,要么执行成功,则该操作所带来的影响永久存在,要么执行不成功,则撤销所进行的所有操作带来的所有影响,将一切事物恢复到操作前的状态。这种事务功能看似没什么用,但是却是有存在的必要,举一个很经典的例子,我们去银行进行转账的时候,其操作流程是存款、转到对应的账户上,假如在这一连串的操作中,虽然存款操作成功了,但是转到对应账户的操作失败了,如果这样放任不管,也就是使其有中间状态,那么这样便意味着用户虽然存款成功了,但其存款的目的转账却失败了,用户将永久的失去这一存款金额,这种操作放在现实中是恐怖的,这样用户每次转账都是在赌运气,运气好的就转成功,运气差一点的话,可能是在存款环节失败没法存款,最差就是转到账户失败,银行自动吞掉存款金额。这样的赌运气操作估计没有任何用户愿意参与的。所以事务的存在是很有必要的,在数据库中便普遍支持事务这一操作,例如MySQL或者Oracle等数据库都允许事务的存在,在事务的实现中,普遍遵循ACID理论,什么是ACID理论,即事务需要遵循的四种特性,分别是原子性、一致性、隔离性、持久性。

原子性是指事务这一连续操作的集合,要么全部执行成功,要么全部执行不成功,不存在只执行操作集合中的部分操作,即跟上面举的银行转账例子一样,不存在只执行存款操作而不执行转账功能。

一致性是指事务带来的影响往往是固定的,即只要执行了这一操作,其影响都是固定的,例如在数据库的事务中更新某条数据后,当事务执行完,便能看到清晰看到改动数据的最新值,而不会看到改动前的旧值,而当事务执行失败的时候,我们所看到的的值就依旧是旧值而不是在事务中更新后的值。这便是一致性,事务的操作会使数据从旧的一致性切换到新的一致性。

持久性是指事务对数据库的改动的永久性,若事务执行成功,其改动的数据在下次被修改前都是永久存在的,当我们数据库发生故障,散失了这个改动也可以通过事务日志来重新恢复改动。

隔离性是指多个事务同时执行的时候,互相不进行干扰,在MySQL中为了保障事务的互不干扰,设立了四种级别,分别是未授权读、授权读、可重复读、串行执行。其中未授权读的是指当一个事务A在对某一个数据进行连续的改动时候,另一个事务B可以观察到数据的变化,即另一个事务可以看到了事务A的状态,这样事务B很容易出现脏读的现象,其所读取到的数据是过时数据,若其使用,必定会出现结果错误,这也是隔离级别最差的一级。第二个级别是授权读取即不允许事务B能观察到事务A的中间状态,它能观察到要么是事务A执行前数据的值,要么是事务A执行后的数据的值,但也存在不可重复读的问题,即事务A的操作中需要访问两次数据dataA,当第一次访问完数据dataA后,dataA的数据被另一个事务修改了,当第二次访问dataA的时候会发现数据已经产生变化了,这便是不可重复读问题。第三个级别是可重复读,即当事务A操作时要对dataA进行读取,会对dataA进行锁定,不允许其他事务对dataA进行修改,解决了不可重复读的问题,但依旧存在幻影读的问题,幻影读按我的理解说其实发生的场景就是当我们在事务A中进行查找表中所有的数据的时候,第一次查找的时候表tableA中的数据是100条,在查找完的时候,刚好另一个事务对tableA进行Insert操作,所以事务A进行第二次查找的时候表tableA的数据便成了101条,多了一条的数据就像幻影一样,突然出现,所以被称为幻影读问题,需要注意的是可重复读和幻影读它们对事务A的影响所对应的操作是不一样的,可重复读是因为另一个事务update某条数据所带来的数据不一致问题,所以进行的解决方法便是锁定要被update的那条数据,不然其他事务对那条数据进行更改,而幻影读是因为另一个事务要要对事务A所涉及的表进行Insert或delete操作,插入或删除某条数据,其解决方法只能是锁定整个表,不让其他事务能对该表进行任何操作,从锁方法来看锁整个表的范围明显大于锁某条数据,所以其消耗的性能将会更多。最后一个级别便是串行化事务,即数据库在任何一个时刻只允许至多一个事务的执行,这种隔离级别是最高的,可以确保任何一个事务在执行的过程中不会被任何一个事务所影响,但其所带来的性能消耗也是最大的,一般很少使用。一般情况下是会选择隔离性的第二个等级即授权读取,实现该级别所需要消耗的性能还可以接受,同时其可以有效避免了脏读的问题。

数据库通过ACID这四个特性保证了事务的正确执行,在接下来的文章里,我会从数据库事务过度到分布式事务,从本地事务的ACID特性转换成CAP和BASE理论

数据库事务ACID特性分析相关推荐

  1. [转]数据库事务ACID特性

    ACID特性 数据库管理系统中事务(transaction)的四个特性(分析时根据首字母缩写依次解释):原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持 ...

  2. 数据库事务ACID特性

    ACID特性 数据库管理系统中事务(transaction)的四个特性(分析时根据首字母缩写依次解释):原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持 ...

  3. 数据库的事务ACID特性以及MySQL如何保持事物特性

    数据库的ACID特性 1.原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响 ...

  4. 数据库事务 四大特性

    数据库事务四大特性(ACID) 敲黑板,这是重点,记下来!!会考到 转载连接:https://www.cnblogs.com/fjdingsd/p/5273008.html ⑴ 原子性(Atomici ...

  5. 数据库事务ACID原则学习分享

    本人结合自己对技术的理解,努力以通俗易懂的内容帮助大家了解技术的基本原理,内容仅供参考,不对或不完善的地方请大家指教,感谢关注! 一.事务概念的引入 当今,信息化技术非常发达的时代,我们通过手机上的银 ...

  6. 【概念原理】四种SQL事务隔离级别和事务ACID特性

    2019独角兽企业重金招聘Python工程师标准>>> 事务是一组读写操作,并且具有只有所有操作都成功才算成功的特性. 事务隔离级别 SQL事务隔离级别由弱到强分别是:READ_UN ...

  7. 数据库 事务的特性ACID

    事务(Transaction)是并发控制的基本单位. 所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位.例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这 ...

  8. 数据库事务ACID详解(转载)

    转载自:http://blog.csdn.net/shuaihj/article/details/14163713 谈谈数据库的ACID 一.事务 定义:所谓事务,它是一个操作序列,这些操作要么都执行 ...

  9. mysql数据库事务传播特性_什么是事务的传播特性?

    我们都知道事务的概念,那么事务的传播特性是什么呢?(此处着重介绍传播特性的概念,关于传播特性的相关配置就不介绍了,可以查看spring的官方文档) 在我们用SSH开发项目的时候,我们一般都是将事务设置 ...

最新文章

  1. 动态数据交换(DDE, Dynamic Data Exchange)简介
  2. mysql双数据源动态切换_Spring boot+Mybatis多数据源动态切换
  3. 网站更换域名和服务器不收录,网站更换域名改如何操作
  4. 红色警戒2修改器原理百科(十)
  5. Android ContentProvider支持跨进程数据共享与互斥、同步 杂谈
  6. 点到线段的距离_直线垂直,垂线的性质,点到直线的距离
  7. pandas concat_pandas-数据合并-concat(最全参数解释,含代码和实例)
  8. 给我一对公钥和私钥,我就能破解此RSA
  9. JAVA中当子类覆盖一个父类的_java – 当子类中的某个方法被覆盖时,父类如何运行?...
  10. Django_xamin注册model错误
  11. 搜狗输入法PC版 v10.5.0.4726 去广告精简版
  12. Android studio基础练习02【监听器实现下拉菜单】
  13. 2021-07-18
  14. 计算机win7启动不起来,详解电脑启动不了怎么办
  15. JavaTutorials之Operators
  16. 算法系列1《DES》
  17. 高通骁龙410e/APQ8016E嵌入式物联网模块芯片
  18. 《用户至上:用户研究方法与实践(原书第2版)》一2.1 概述
  19. Java、JSP反垃圾邮件管理系统
  20. 网络安全就业前景怎么样?好找工作吗?

热门文章

  1. java开源报表工具,最好的开源报表工具
  2. c# DataTable批量写入数据库
  3. 【XJTUSE计算机图形学】第二章 光栅图形学(1)
  4. 2023 年第三届长三角高校数学建模 C 题 考研难度知多少
  5. SQL Server 高级技术(二)—— 安全
  6. 拥抱未来,开源先行!OpenI启智社区首批优秀开发者榜单即将出炉
  7. Markov chain 整理
  8. RGB转YUV----RGB色域与YUV色域的介绍
  9. 【LaTex】宏包pageno的使用方法,命令\pageno的用法
  10. 暑期实训:Unsplash网站图片推荐算法