对事务的特性ACID的理解

数据库的事务必须具备ACID特性,ACID是指 Atomicity(原子性)、Consistensy(一致性)、Isolation(隔离型)和Durability(持久性)的英文缩写。

1、原子性(Atomicity

事务包装的一组sql,要么都执行成功,要么都失败。这些操作是不可分割的。

2、一致性(Consistency

        数据库的数据状态是一致的。

事务的成功与失败,最终数据库的数据都是符合实际生活的业务逻辑。一致性绝大多数依赖业务逻辑和原子性。

3、持久性:(Durability

事务成功提交之后,对于数据库的改变是永久的。哪怕数据库发生异常,重启之后数据亦然存在。

4、隔离性(Isolation

        一个事务的成功或者失败对于其他的事务是没有影响。2个事务应该相互独立。

事务的隔离级别

如果不考虑事务的隔离性,由于事务的并发,将会出现以下问题:

1、脏读 -- 最严重,杜绝发生

2、不可重复读

3、幻读(虚读)

脏读:指一个事务读取了另外一个事务 未提交的数据。

一个事务读取了另一个事务没有提交的数据,非常严重。应当尽量避免脏读。

不可重复读:在一个事务内多次读取表中的数据,多次读取的结果不同。

幻读(虚读)

隔离级别:如何解决问题

l  数据库规范规定了4种隔离级别,分别用于描述两个事务并发的所有情况。

  1. read uncommitted 读未提交,一个事务读到另一个事务没有提交的数据。

a)       存在:3个问题(脏读、不可重复读、虚读)。

b)       解决:0个问题

  1. read committed 读已提交,一个事务读到另一个事务已经提交的数据。

a)       存在:2个问题(不可重复读、虚读)。

b)       解决:1个问题(脏读)

  1. repeatable read:可重复读,在一个事务中读到的数据始终保持一致,无论另一个事务是否提交。

a)       存在:1个问题(虚读)。

b)       解决:2个问题(脏读、不可重复读)

  1. serializable 串行化,同时只能执行一个事务,相当于事务中的单线程。

a)       存在:0个问题。

b)       解决:3个问题(脏读、不可重复读、虚读)

安全和性能对比

 安全性:serializable > repeatable read > read committed > read uncommitted

    性能 : serializable < repeatable read < read committed < read uncommitted

常见数据库的默认隔离级别:

    MySql:repeatable read

   Oracle:read committed

演示

查询数据库的隔离级别

show variables like '%isolation%';

select @@tx_isolation;

设置数据库的隔离级别

set session transaction isolation level 级别字符串

级别字符串:read uncommitted、read committed、repeatable read、serializable

例如:set session transaction isolation level read uncommitted;

	读未提交:read uncommitted
 A窗口设置隔离级别
 AB同时开始事务
 A 查询
 B 更新,但不提交
 A 再查询?-- 查询到了未提交的数据
 B 回滚
 A 再查询?-- 查询到事务开始前数据  读已提交:read committed
 A窗口设置隔离级别
 AB同时开启事务
 A查询
 B更新、但不提交
 A再查询?--数据不变,解决问题【脏读】
 B提交
 A再查询?--数据改变,存在问题【不可重复读】  可重复读:repeatable read
 A窗口设置隔离级别
 AB 同时开启事务
 A查询
 B更新, 但不提交
 A再查询?--数据不变,解决问题【脏读】
 B提交
 A再查询?--数据不变,解决问题【不可重复读】
 A提交或回滚
 A再查询?--数据改变,另一个事务  串行化:serializable
 A窗口设置隔离级别
 AB同时开启事务
 A查询
 B更新?--等待(如果A没有进一步操作,B将等待超时)
 A回滚
 B 窗口?--等待结束,可以进行操作

  

对事务的特性ACID的理解的更多相关文章

  1. 数据库 事务的特性ACID

    数据库 事务的特性ACID 事务(Transaction)是并发控制的基本单位. 所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位.例如,银行转帐工作:从一个帐 ...

  2. 事务及其特性ACID

    一.事务的定义 事务是一组单元化的操作,这组操作可以保证要么全部成功,要么全部失败(只要有一个失败的操作,就会把其他已经成功的操作回滚). 一般所说的数据库事务,它是访问并可能更新数据库中各种数据项的 ...

  3. 事务的特性(ACID)

    一.事务 定义:所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位. 准备工作:为了说明事务的ACID原理,我们使用银行账户及资金管理的案例进行分析. // 创建 ...

  4. 事务的特性ACID、隔离级别

    1.事务特性ACID 1.1 事务的四大特性 1.原子性(Atomicity) 事务包装的一组sql,要么都执行成功,要么都失败.这些操作是不可分割的. 2.一致性(Consistency) 数据库的 ...

  5. 事务的特性——ACID

    在日常操作中,对于一组相关操作通常需要其全部成功或全部失败.在关系型数据库中,这组操作称作为事务.事务具有四种特性:原子性,一致性,隔离性和持久性. 原子性(atomicity):事务必须以一个整体单 ...

  6. 事务的四大特性(ACID):

    事务的四大特性(ACID):    1.原子性(Atomicity): 事务中所有操作是不可再分割的原子单元.事务中所有操作要么都执行成功,要么都执行失败. 2.一致性(Consistency): 事 ...

  7. 事务四大特性(ACID)

    事务的概念:事务是指逻辑上的一组操作,这组操作要么同时完成要么同时不完成. 事务的管理:默认情况下,数据库会自动管理事务,管理的方式是一条语句就独占一个事务. 如果需要自己控制事务也可以通过如下命令开 ...

  8. MySQL事务内幕与ACID

    MySQL的事务实现严格遵循ACID特性,即原子性(atomicity),一致性(consistency),隔离性(isolation),持久性(durability).为了避免一上来就陷入对ACID ...

  9. 粗谈MySQL事务的特性和隔离级别

    网上对于此类的文章已经十分饱和了,那还写的原因很简单--作为自己的理解笔记. 前言 ​  此篇文章作为自己学习MySQL的一些个人理解,使用的引擎是InnoDb.首先先讲讲事务的概念,在<高性能 ...

随机推荐

  1. 《Cracking the Coding Interview》——第18章:难题——题目6

    2014-04-29 02:27 题目:找出10亿个数中最小的100万个数,假设内存可以装得下. 解法1:内存可以装得下?可以用快速选择算法得到无序的结果.时间复杂度总体是O(n)级别,但是常系数不小 ...

  2. Django笔记 —— 模型

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  3. 收集的java面试题

    1.谈谈final, finally, finalize的区别. final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为 ...

  4. Vue组件编写

    Vue无疑是近来最火的一个前端框架,它吸取了angular1.x和react的精华,性能优良,而且易于上手,本文主要是关于如何去写一个组件. 首先是项目目录 编写组件 在这里我写了一个日期控件(移动端 ...

  5. Percona-Tookit工具包之pt-heartbeat

      Preface       Replication delay is a common issue in MySQL replications.Especially in those replic ...

  6. android配置开发环境

    1.下载Java SE并安装. 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 配置环境变量 我的电脑- ...

  7. hadoop2.6.4【ubuntu】单机环境搭建 系列1

    jdk安装 tar zxvf jdk mv jdk /usr/lib/jvm/java jdk环境变量配置 vim /etc/profile ``` export JAVA_HOME=/usr/lib ...

  8. java 两个csv文件数据去重

    1.pom.xml配置 <dependency> <groupId>commons-io</groupId> <artifactId>commons-i ...

  9. Android程序猿必须警示的13个坑

        Android开发中,犯错是难免的,不犯错是不正常的,但是犯了错以后,我们必须时刻谨记这些坑,避免再次被坑,下面小编整理了13个,日常工作中,比较常见且易犯的错误,分享给大家.    1.类的 ...

  10. 以太坊源码分析(52)以太坊fast sync算法

    this PR aggregates a lot of small modifications to core, trie, eth and other packages to collectivel ...