`

浅谈数据库事务

阅读更多
事务的四大特性(ACID)
原子性

原子性是指事务包含的所有操作要么全部成功,要么全部失败。
例小王要向小李转账200元。则账要么转账成功小王账户减200元,小李账户加200元,要么执行失败,两者账户都不动。

一致性

一致性是指事务执行之前和执行之后都必须处于一致性状态。

假设转账前小王和小李的余额之和是2000元,那么不管他们之间进行了多少次转账,他们的余额之和肯定还是2000元。

隔离性

隔离性是当多个事务并发操作数据库时,不能被其他事务的操作所干扰

例小王银行卡只有200元了,他要向小李转账200元时银行方面进行银行卡的年费扣除则这两个操作必定不可能都成功。

持久性

持久性是指一个事务一旦提交,那么对数据库中的数据的改变就是永久性的。

当小王和小李之间进行一次转账时,这笔转账记录便永久的保存在数据库里.

并发事务存在的问题

上方提到了数据库事务的隔离性,先看一下如果事务之间不进行隔离的话可能出现什么问题

脏读

脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。
  当一个事务正在多次修改某个数据,而在这个事务中这多次的修改都还未提交,这时一个并发的事务来访问该数据,就会造成两个事务得到的数据不一致。同上方的例子:小王向小李转账200元,对应SQL命令如下

1
2
update account set balance=balance+200 where name=’小李’; 
update account set balance=balance-200 where name=’小王’;

当只执行第一条SQL时,小李查询余额发现确实钱已到账(此时即发生了脏读),而之后如果该事务不提交或者出现异常,则所有操作都将回滚,那么小李再次查看账户时就会发现钱其实并没有到账。

不可重复读

例如事务T1在读取某一数据,而事务T2立马修改了这个数据并且提交事务给数据库,事务T1再次读取该数据就得到了不同的结果,这个时候就发生了不可重复读。

幻读

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

幻读和不可重复读都是读取了另一条已经提交的事务,所不同的是不可重复读查询的是同一个数据项,而幻读针对的是一批数据。

事务的隔离级别

Read uncommitted (读未提交)最低级别,任何情况都无法保证。
Read committed (读已提交):可避免脏读的发生。
Repeatable read (可重复读):可避免脏读、不可重复读的发生。
Serializable (串行化):可避免脏读、不可重复读、幻读的发生。
注意

上方隔离级别从低到高,隔离级别越高效率越低。
在MySQL数据库中,支持上面四种隔离级别,默认为Repeatable read
在Oracle数据库中,只支持Serializable和Read committed ,默认为Read committed级别



 

  • 大小: 171.6 KB
0
0
分享到:
评论

相关推荐

    浅谈数据库事务四大特性

    主要介绍了浅谈数据库事务四大特性,小编觉得挺不错的,这里分享给大家,供需要的朋友参考。

    浅谈数据库中事务处理和并发控制技术

    该文档主要浅谈了数据库事务处理和并发控制的技术,可以作为初学者的参考文档

    实时数据库系统的设计浅谈.docx

    实时数据库系统的设计浅谈全文共3页,当前为第1页。实时数据库系统的设计浅谈全文共3页,当前为第1页。实时数据库系统的设计浅谈 实时数据库系统的设计浅谈全文共3页,当前为第1页。 实时数据库系统的设计浅谈全文共...

    2020中国数据库技术大会PPT合集(77份).zip

    2020中国数据库技术大会PPT合集(77份)。 在线分析进入Fast Data...浅谈数据库服务和架构演讲 平安数据库开发质量管理实践 面向生产力的数据架构演进 每秒万级订单的数据库优化实践 流程IT数据库上云实践 等等文档

    浅谈oracle rac和分布式数据库的区别

    2.rac事务上没有协调的问题,而分布式数据库由于是多个库需要事务上的协调; 3.分布式数据库数据是分散存储在各个节点,但是设备一般都是廉价的设备,经常出现节点故障,不过对用户来说是透明的;.RAC是ORACLE集群...

    浅谈多媒体数据库体系结构 (2011年)

    多媒体数据库管理系统与传统的数据库系统一样,要提供对数据的管理、查询和事务处理等功能。除此之外,对于多媒体数据库管理系统必须要求它有独立于媒体的变化;由于其具有面向对象的特征,而往往需要根据不同的对象而 ...

    嵌入式系统/ARM技术中的浅谈事务管理器的事务恢复处理方案

    随来社会的进步,计算机的广泛应用,很多事务处理过程中事务的恢复工作一般依赖于计算机数据库管理系统,而事务管理器必须做好分布式事务处理的事务恢复处理。这需要做好二个阶段的工作:在正常的事务处理过程中,...

    MYSQL 浅谈MyISAM 存储引擎

    注意:如果你在数据库进行事务操作,但是事务无法成功,你就要看你的表引擎了,看这种引擎是否支持事务。 >> 下面请看innodb中的事务操作   > 存储结构:数据文件(.MYD),索引文件(.MYI)和结构文

    详解SQL Server中的事务与锁问题

    “浅谈SQL Server 事务与锁”这个专题共分两篇,上篇主讲事务及事务一致性问题,并简略的提及一下锁的种类和锁的控制级别。 下篇主讲SQL Server中的锁机制,锁控制级别和死锁的若干问题。 二 事务 1 何为事务  ...

    浅谈MySql的存储引擎(表类型)

    什么是MySql数据库 通常意义上,数据库也就是...目前,它可以提供的功能有:支持sql语言、子查询、存储过程、触发器、视图、索引、事务、锁、外键约束和影像复制等。在后期,我们会详细讲解这些功能。 同Oracle 和SQ

    浅谈领域模型驱动中表的设计方法

     层次 职责 表现层 提供服务、显示信息 领域层(业务逻辑) 逻辑、系统中真正的核心 数据源层 与数据库、消息系统、事务管理器及其他软件包通信分层基本原则领域层和数据源层绝对不要依赖于表现层;...

    浅谈oracle SCN机制

    在理解SCN之前,我们先看下oracle事务中的数据变化是如何写入数据文件的: 1、事务开始; 2、在buffer cache中找到需要的数据块,如果没有找到,则从数据文件中载入buffer cache中; 3、事务修改buffer cache的...

    浅谈MySQL存储引擎选择 InnoDB与MyISAM的优缺点分析

    下面先让我们回答一些问题: ◆你的数据库有外键吗? ◆你需要事务支持吗? ◆你需要全文索引吗? ◆你经常使用什么样的查询模式? ◆你的数据有多大? 思考上面这些问题可以让你找到合适的方向,但那并不是绝对的。如果...

    浅谈选择mysql存储引擎的标准

    InnoDB是MySQL的默认事务型引擎,它被设计用来处理大量的短期(short-lived)事务。除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。 建议使用MySQL5.5及以后的版本,因为这个版本及以后的...

    浅谈Python实现Apriori算法介绍

    导读: 随着大数据概念的火热,啤酒与尿布的故事广为人知。我们如何发现买啤酒的人往往也会买尿布这一规律?数据挖掘中的用于挖掘频繁项集和关联规则的Apriori算法可以告诉我们。本文首先对Apriori算法进行简介,...

    浅谈MySQL中四种常用存储引擎

    不支持事务、也不支持外键,优势是访问速度快,对事务完整性没有 要求或者以select,insert为主的应用基本上可以用这个引擎来创建表 支持3种不同的存储格式,分别是:静态表;动态表;压缩表 静态表:表中的字段都...

    浅谈php中mysql与mysqli的区别分析

    其次,mysqli封装了诸如事务等一些高级操作,同时封装了DB操作过程中的很多可用的方法。应用比较多的地方是 mysqli的事务。比如下面的示例:复制代码 代码如下:$mysqli = new mysqli(‘localhost’,’root’,”,’DB...

    浅谈InnoDB隔离模式的使用对MySQL性能造成的影响

    在这篇文章里我将讨论一个相关的主题 – InnoDB 事务隔离模式,还有它们与MVCC(多版本并发控制)的关系,以及它们是如何影响MySQL性能的。 MySQL手册提供了一个关于MySQL支持的事务隔离模式的恰当描述 – 在这里我...

Global site tag (gtag.js) - Google Analytics