对事务的特性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. USACO Section1.3 Wormholes 解题报告

    wormhole解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------- ...

  2. Python全栈 MySQL 数据库 (简述 、安装、基本命令)

    ParisGabriel              每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰    开局一张图     一个月的python已经结束了  下面就是数据库了   先说M ...

  3. STL之set&multiset使用简介

    关于set,必须说明的是set关联式容器.set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序.应该注 ...

  4. 201621123033 《Java程序设计》第2周学习总结

    1. 本周学习总结 ·学习了String类的特点,以及其与字符数组的关系等等. ·常量池的相关概念. ·包装类的特点. 2. 书面作业 1. String-使用Eclipse关联jdk源代码 1.1 ...

  5. AJAX提交表单后要清空,否则再次提交原来的数据会认为重复提交,提交失败。使用ajaxSubmit 函数需要引入jquery.form.min.js 文件

    <script src="../../Scripts/js/jquery.form.min.js" type="text/javascript">& ...

  6. DateBase -- Rising Temperature

    Question: Given a Weather table, write a SQL query to find all dates' Ids with higher temperature co ...

  7. redis cluster管理工具redis-trib.rb详解

    redis cluster管理工具redis-trib.rb详解 来源 http://weizijun.cn/2016/01/08/redis%20cluster%E7%AE%A1%E7%90%86% ...

  8. JS DOM对象与jQuery对象的转换

    JS转jQuery // 直接用$()来包裹 如同$(this) $(document) var jsObj = document.getElementById('test'); var jquery ...

  9. margin-top影响父元素定位

    写样式时无意中发现margin-top会影响到父元素的定位,下面是示例: HTML代码: <div class="demo"> <div class=" ...

  10. 幸运数字(luckly)

    幸运数字(luckly) 题目描述 A国共有 nn 座城市,这些城市由 TeX parse error: Misplaced & 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有 ...