原子性【Atomicity】

原子性指的指的就是这个操作,要么全部成功,要么全部失败回滚。不存在其他的情况。

一致性(Consistency)

一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。

举个例子。就是A和B的钱是1000元,A给你100元,无论最后双方转了多少次,总的钱一定是1000元。

隔离性(Isolation)

隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离

持久性(Durability)

持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

并发操作几个问题

在事务的并发操作中可能会出现脏读,不可重复读,幻读。

脏读

脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。

比如A转账给B100元,然后还没有提交成功,这个时候,你用B用手机付款,这个事务读取到这个100了。然后就行了扣款,B读到的这个数据就是脏数据。因为A没有提交,可能会撤销。

不可重复读

不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。不可重复读一般是update操作

举例:比如A事务 读取了一个记录,然后此时B事务修改了这个记录会提交了,A事务再进行读取的时候就会跟之前的记录不一样。 会产生我们说的ABA问题。

幻读

幻读是事务非独立执行时发生的一种现象。例如事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有一行没有修改,其实这行是从事务T2中添加的,就好像产生幻觉一样,这就是发生了幻读。 幻读一般是insert操作

举例:程序员某一天去消费,花了2千元,然后他的妻子去查看他今天的消费记录(全表扫描FTS,妻子事务开启),看到确实是花了2千元,就在这个时候,程序员花了1万买了一部电脑,即新增INSERT了一条消费记录,并提交。当妻子打印程序员的消费记录清单时(妻子事务提交),发现花了1.2万元,似乎出现了幻觉,这就是幻读。

四种隔离

数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。

Read uncommitted 未提交读

最低的隔离,就是可以读取到未提交的数据。会产生脏读。

A给B转账1000元。开启事务,还没提交。 此时B查看自己余额多了1000元。但是突然A输错了密码。放弃了转款,回滚。此时这个B看到1000元就是一个脏数据,因为事务没有提交完成。

Read committed 提交读

就是一个事务要等另一个事务提交后才能读取数据。

比如A的卡里有1000元。去请吃饭花付钱需要花900元。然后此时他媳妇B取出了500.当结账的时候,就会出现付款失败。出现这种情况,就是因为出现了B取钱的时候,没有等待A刷卡这个事务完成,而自己的事务开始读取和提交了数据。

Repeatable read 重复读

重复读,就是在开始读取数据(事务开启)时,不再允许修改操作。MySQL默认的事务隔离级别是Rr 重复读

比如上面的例子。当A进行付款的时候,B取款的操作就应该等待,不允许进行修改。

Serializable 序列化

Serializable 是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。

序列化就是将并行的操作。改成顺序执行。

数据库事务的四个特性ACID的更多相关文章

  1. 数据库事务的四个特性(ACID)、事务的隔离级别

    事务是一个不可分割的最小逻辑工作单元. 事务具有四个特征:原子性( Atomicity ).一致性( Consistency ).隔离性( Isolation )和持久性( Durability ). ...

  2. 事务的四个特性-ACID

    事务是恢复和并发控制的基本单位.   事务应该具有4个属性:原子性.一致性.隔离性.持久性.这四个属性通常称为ACID特性.   原子性(atomicity):一个事务是一个不可分割的工作单位,事务中 ...

  3. 数据库事务的4个特性ACID

    原子性(Atomicity[ætə'mɪsɪti])原型atomic.一致性(Consistency).隔离性(Isolation).持久性(Durability)

  4. oracle事务的四个特性(ACID)

    事务产生的背景 当在PL/SQL中同时操作多个SQL语句,比如通过DML语句添加.修改或删除数据时,如何确保数据库数据不会因为意外而倒置错误数据是一个非常重要的问题. 以仓库发料系统为例,如果某一张领 ...

  5. 什么是事务?事务的四个特性(ACID)?并发事务带来哪些问题?事务隔离级别都有哪些?事务的传播特性

    什么是事务? 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事物的四个 ...

  6. MySQL(20):事务简介 和 事务的四个特性

    1. 事务概念引入: 现实生活中,我们往往经常会进行转账操作,转账操作可以分为两部分来完成,转入和转出.只有这两部分都完成了才可以认为是转账成功.在数据库中,这个过程是使用两条语句来完成的,如果其中任 ...

  7. 【Mysql】事务的四种特性和隔离级别

    四种特性: 原子性(Atomicity):事务里所有操作视为一个整理,要么全部完成,要么全回滚. 一致性(Consistency):操作前后,数据库内数据逻辑上一致.比如:1w元转账给不同的人,转出去 ...

  8. 事务的四个属性ACID

    事务四大特征:原子性,一致性,隔离性和持久性. 1. 原子性(Atomicity) 一个原子事务要么完整执行,要么干脆不执行.这意味着,工作单元中的每项任务都必须正确执行.如果有任一任务执行失败,则整 ...

  9. 数据库事务 ACID属性、数据库并发问题和四种隔离级别

    数据库事务 ACID属性.数据库并发问题和四种隔离级别 数据库事务 数据库事务是一组逻辑操作单元,使数据从一种状态变换到另一种状态 一组逻辑操作单元:一个或多个DML操作 事务处理原则 保证所有事务都 ...

随机推荐

  1. Python实用笔记 (21)面向对象编程——获取对象信息

    当我们拿到一个对象的引用时,如何知道这个对象是什么类型.有哪些方法呢? 使用type() 首先,我们来判断对象类型,使用type()函数: 基本类型都可以用type()判断: >>> ...

  2. GraphicsLab Project 之 Screen Space Planar Reflection

    作者:i_dovelemon 日期:2020-06-23 主题:Screen Space Planar Reflection, Compute Shader 引言 前段时间,同事发来一篇讲述特化版本的 ...

  3. Bash 脚本编程的一些高级用法

    概述 偶然间发现 man bash 上其实详细讲解了 shell 编程的语法,包括一些很少用却很实用的高级语法.就像发现了宝藏的孩子,兴奋莫名.于是参考man bash,结合自己的理解,整理出了这篇文 ...

  4. P2629 【好消息,坏消息】

    其实刚开始看到这道题,应该很多都会想到区间DP中的合并石子,开一个2倍的空间(严格来说的话应该是2n-1),将本来的环变成一个链式的结构.然后对于得到的消息,可以预处理一个前缀和,这样就可以很方便的知 ...

  5. 洛谷 P6145 【[USACO20FEB]Timeline G】

    这道题难就难在建图吧,建图懂了之后,跑一遍最长路就好了(也就是关键路径,但是不会用拓补排序求qnq,wtcl). 怎么建图呢?先不管输入的S,看下面的输入,直接建有向边即可,权值为x.如果现在跑最长路 ...

  6. web前端达到什么水平,才能找到工作?

    前端都需要学什么(可以分为八个阶段)<1>第一阶段: HTML+CSS:HTML进阶. CSS进阶.DIV+CSS布局.HTML+CSS整站开发. JavaScript基础:Js基础教程. ...

  7. 数据的编码和解码--java例子

    昨天借了一本<网络程序设计实验教程(java语言)>,然后看了第一章,一个Swing例子,于是为大家分享一下! 关于数据的编码与解码,我觉得就例子而言已经交待得非常清楚了,两种方法做的. ...

  8. 深入了解JVM-方法区

    本文首发于微信公众号[猿灯塔],转载引用请说明出处 今天呢!灯塔君跟大家讲: 深入了解JVM-方法区 当JVM使用类装载器装载某个类时,它首先要定位对应的class文件,然后读入这个class文件,最 ...

  9. django模板中变更数据库信息后,如何把变更后的信息同步更新到数据库

    我们在基于django开发项目的过程中,经常会遇到数据库表字段增加,删除,或者修改的情况,以及字段属性更改的情况,因为django基于ORM模式来操作数据库的, 传统上如果django项目中的数据库m ...

  10. 软件测试大牛都是这样写测试用例的,你get到了嘛?

    1. 用于语句覆盖的基路径法 基路径法保证设计出的测试用例,使程序的每一个可执行语句至少执行一次,即实现语句覆盖.基路径法是理论与应用脱节的典型,基本上没有应用价值,读者稍作了解即可,不必理解和掌握. ...