数据库事务特性汇总

数据库事务可能大家都很熟悉,在开发过程中也会经常使用到。但是即使如此,可能对于一些细节问题,很多人仍然不清楚。比如很多人都知道数据库事务的几个特性:原子性(Atomicity )、一致性( Consistency )、隔离性或独立性( Isolation)和持久性(Durabilily),简称就是ACID。但是再往下比如问到隔离性指的是什么的时候可能就不知道了,或者是知道隔离性是什么但是再问到数据库实现隔离的都有哪些级别,或者是每个级别他们有什么区别的时候可能就不知道了。

  当然这些问题都可以搜索得到,这里作下汇总;

数据库事务ACID特性:

  A:原子性(Atomicity )   原子性意味着每个事务都必须被看作一个不可分割得单元,假设一个事务由两个或者多个任务组成,其中的语句必须同时成功才能认为整个事务是成功的,如果事务失败,系统将会返回到该事务以前的状态;

  B:一致性( Consistency )    不管事务是完全成功还是中途失败,当该事务要使系统处于一致性的时候,就必须要保证一致性,比如  从系统中删除了一个用户的信息,那么与该用户相关的数据也要被删除;

  C:隔离性( Isolation)   隔离性是指每个事务只能在自己的空间里发生,事务之间不可见,而事务的结果也只能在它被完全执行过后才能被看到,如果事务之间可以互相看到,那么必然会造成大量数据的破坏;

  D:持久性(Durabilily)   当一个事务被成功提交,哪怕这时候系统数据库崩溃,因为事务被完成,数据库的日志已经被更新,持久性就开始发生作用,当数据库恢复时,日志里的记录会被写入到库中;

数据库隔离级别:

  这里是数据库设计方面针对上面所述的隔离性做的扩展,因为有很多时候,我们可能并不需要强隔离性。

  这里存在四种隔离级别:

  (1)序列化(SERIALIZABLE):如果隔离级别是序列化,那么事务必须一个一个按顺序排队执行,这提供了最大限度的隔离,当然这样的机制必然会使系统处理业务的性能受影响,一般情况下,我们不推荐这样设置;

  (2)可重复读(REPEATABLE  READ) 在这级别上,事务不会排队执行,而且也能保证事务之间执行的变化不被看到,也就是说,在同一个事务中执行同条select语句,所看到的结果都是相同的;

  (3)读已提交(READ COMMITTED) 提交读会比可重复读的安全性要差,因为在这一级别上,事务可以看到别的事务已提交的数据,也就是说同条select语句有可能读到不一样的数据;

  (4)读未提交(READ UNCOMMITTED)这种级别提供了最小限度的隔离,它使得事务可以看到别的事务未提交的数据,这得多可怕,所以这种最差的隔离级别也是不被推荐使用。

上述的隔离机制都是为了预防哪些问题的发生呢?

并发访问会产生的问题(归类四种):

  (1)丢失更新:当多个事务同时对同一行数据操作,因为事务之间不可见,他们都是基于最初的值进行修改,所以可能会导致事务A的更新操作会被事务B的更新操作所覆盖,这就导致数据丢失;

  (2)脏读:一个事务可能读到了别的事务未提交的数据,那么就会发生脏读问题;

  (3)不可重复读:这与上述的脏读有相似之处,是指在同一个事务中第一次读到的数据可能与第二次读到的数据不一样,因为第二次读到的数据可能正在被其他事务所修改。

  (4)幻读:是指在同一个事务中第一次读到的数据在第二次读取中都不到了,因为第二次想要读到的数据可能正在被其他事务所删除。

那么我们熟悉的mysql和oracle是怎样处理这些问题的呢?

mysql支持四种隔离级别;

mysql默认的事务处理级别是‘REPEATABLE-READ‘,也就是可重复读

1.查看当前会话隔离级别

select @@tx_isolation;

2.查看系统当前隔离级别

select @@global.tx_isolation;

3.设置当前会话隔离级别

set session transaction isolatin level repeatable read;

4.设置系统当前隔离级别

set global transaction isolation level repeatable read;

而oracle只支持提交读(READ COMMITTED) 和 序列化(SERIALIZABLE)这两种事务隔离级别。

oracle默认的事务隔离级别是READ COMMITTED,也就是读已提交

所以在这点上,两者之间还是有区别的;

下面的图具有阶梯性质的,容易记;

原文地址:https://www.cnblogs.com/xinde123/p/8548269.html

时间: 2024-10-02 13:24:28

数据库事务特性汇总的相关文章

数据库事务特性和隔离级别

事务 一组业务操作,要么全部成功,要么全部不成功. ----------------事务的特性-------------- 原子性:一个事务是一个整体,不可分割,事务中的操作要么都成功,要么都失败. 一致性:事务必须是使数据库从一个一致性状态变到另一个一致性状态.事务执行前后,数据库的状态是一致的. 例如:A有1000,元,B有1000元,加起来是2000,中间执行转账的操作,转账后两个人的钱加起来还是2000. 隔离性:两个或多个事务并发操作,之间会互相影响.数据库提供了隔离级别来消除这些影响

数据库事务特性ACID

事务 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit).在计算机术语中,事务通常就是指数据库事务. 概念 一个数据库事务通常包含对数据库进行读或写的一个操作序列.它的存在包含有以下两个目的: 1.为数据库操作提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法.2.当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰.

我理解的数据库事务

一.最简单的例子来说明事务 "A账户向B账号汇钱"来说明事务 1.从A账号中把余额读出来.2.对A账号做减法操作.3.把结果写回A账号中.4.从B账号中把余额读出来.5.对B账号做加法操作.6.把结果写回B账号中. 为了数据的一致性,这6件事,要么都成功做完,要么都不成功.而且这个操作的过程中.对A.B找好的其他访问必须锁死,所谓锁死就是要排除其他的读写操作,不然会有脏数据问题,这就是事务. 二.数据库事务特性 Atomic(原子性) 事务中包含的操作被看做一个逻辑单元,这个逻辑单元中

MySQL 数据库事务与复制

好久没有写技术文章了,因为一直在思考 「后端分布式」这个系列到底怎么写才合适. 最近基本想清楚了,「后端分布式」包括「分布式存储」和 「分布式计算」两大类. 结合实际工作中碰到的问题,以寻找答案的方式来剖解技术,很多时候我们都不是在创造新技术,而是在应用技术. 为了更有效率与效果的用好技术,我们需要了解一些技术的原理与工作方式. 带着问题从使用者的角度去剖析技术原理,并将开源技术产品和框架作为一类技术的参考实现来讲解. 以讲清原理为主要目的,对于具体实现的技术细节若无特别之处则尽可能点到即止.

数据库事务的四大特性和事务隔离级别

Reference: [1] http://www.cnblogs.com/fjdingsd/p/5273008.html [2] http://blog.csdn.net/fg2006/article/details/6937413 数据库事务四大特性 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全

数据库事务的四大特性ACID

本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,所以事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响.为了实现原子性,需要通过日志:将所有对数据的更新操作都写入日志,如果一个事务中的一部分操作已经成功,但以后的操作,由于断电/系统崩溃/其它的软硬件错误而无法继续,则通过

MySql数据库并发和事务资料汇总

InnoDB多版本并发控制-MVCC http://my.oschina.net/xinxingegeya/blog/208821 MySql并发控制 http://my.oschina.net/xinxingegeya/blog/215417 MySQL之事务 http://my.oschina.net/xinxingegeya/blog/215419 MySql命令行控制事务 http://my.oschina.net/xinxingegeya/blog/296459 MySQL事务隔离级别

数据库 事务的特性ACID

事务(Transaction)是并发控制的基本单位. 所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位.例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这两个操作要么都执行,要么都不执行. 数据库事务必须具备ACID特性,ACID是Atomic(原子性).Consistency(一致性).Isolation(隔离性)和Durability(持久性)的英文缩写. 原子性:指整个数据库事务是不可分割的工作单位.只有使据库中所有的操作执行成功,才算整个事务

数据库事务的四大特性和隔离级别

数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么全部执行,要么全部都不执行. 一个逻辑工作单元要成为事务,必须满足事务的四大特性(ACID).即原子性(Atomic).一致性(Consistent).隔离性(Insulation)和持久性(Duraction). 原子性(Atomic):事务是一个完整的操作,事务的各个操作步骤是不可分的.即要么都执行,要么都不执行. 一致性(Consistent):事务执行的结果必须使数据库从一个一致性状态