对事务的特性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 窗口?--等待结束,可以进行操作

  

转载于:https://www.cnblogs.com/daiwei1981/p/9338420.html

对事务的特性ACID的理解相关推荐

  1. java事务四大特性ACID

    对于要把事务在实际中使用好,需要了解事务的特性. 事务的四大特性主要是:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability). ...

  2. 数据库 事务的特性ACID

    事务(Transaction)是并发控制的基本单位. 所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位.例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这 ...

  3. mysql事务最好别用_理解完这些基本上能解决面试中MySql的事务问题

    前言 在面试中,基本上都会问到关于数据库的事务问题,如果啥都不会或者只回答到表面的上知识点的话,那面试基本上是没戏了,为了能顺利通过面试,那MySql的事务问题就需要了解,所以就根据网上的资料总结一版 ...

  4. 数据库MySQL基础---事务相关特性--连接池DBCP--C3P0--JavaBean--DBUtils工具

    事务相关特性–连接池DBCP–C3P0–JavaBean–DBUtils工具 事务的概念 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项 ...

  5. 理解事务四大特性(Transaction)——原子性、一致性、隔离性和持久性(ACID)

    事务是指对系统进行的一组操作,为了保证系统的完整性,事务需要具有ACID特性,具体如下: 1. 原子性(Atomic) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生. ...

  6. 事务的四个特性-ACID

    事务的四个特性-ACID 事务是恢复和并发控制的基本单位. 事务是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可翻个的工作单位 一个转账必须A账号扣钱成功,B账号加 ...

  7. 什么是事务、事务的四个特性ACID、不考虑隔离性会导致的三个问题、四种隔离级别

    什么是事务.事务的四个特性ACID.不考虑隔离性会导致的三个问题.四种隔离级别 1 什么是事务 2 事务的四大特性ACID 2.1 原子性 2.2 一致性 2.3 隔离性 2.4 持久性 3 不考虑隔 ...

  8. 事务的4个特性——ACID(原子性、一致性、隔离性和持久性)、更新丢失问题...

    事务的4个特性--ACID(原子性.一致性.隔离性和持久性) 事务是一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.事务通常以BEGIN TRANSACTION开始,以COMMI ...

  9. java中事务特性_java事务的四大特性ACID

    前言 对于要把事务在实际中使用好,需要了解事务的特性. 事务的四大特性主要是:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability ...

最新文章

  1. html登录界面cookie,HTML中使用cookie保存登录账户
  2. Generator-ing Values
  3. 【Spring注解系列10】SpringBean的生命周期
  4. BUAA_OO第三单元作业总结——JML
  5. OSGi简介–模块化Java
  6. java 反射api_个人编程学习网 - Java-操作反射其他的API
  7. input单选框多选框时可用的事件
  8. Java——面向对象三大特性学习笔记
  9. 配置多个git账号_git配置账号(用户名/邮箱)
  10. AD10 PCB等长布线----蛇形布线
  11. VIsualSVNSever 和SVN安装教程
  12. GD32 USB调试、DFU过程问题
  13. 证件照换背景颜色方法
  14. 痞子衡嵌入式:盘点国内Cortex-M内核MCU厂商高主频产品(2023)
  15. 大模型为什么是深度学习的未来?
  16. 如何确定windows右下角弹出的窗口是哪个程序搞的鬼
  17. Rebbitmq-3-SpringBoot整合
  18. 如何快速有效玩弄乙方?
  19. 神舟十二号航天员名单确定,3名航天员本次上天将完成这些任务
  20. 网站服务器80端口怎么开放,开放80端口配置

热门文章

  1. 《深入理解Elasticsearch(原书第2版)》一2.2 查询改写
  2. 九度 1479:移位和旋转
  3. springmvc基本配置
  4. matlab图像处理函数大全
  5. 实现基于虚拟用户的邮件系统架构
  6. HTML5学习笔记(三):HTML5的智能提示在VisualStudio2010
  7. 致SEO初学者:学习SEO要注意的几个问题
  8. SAS 中计算总和或者计算总数的方法
  9. 禁止MT在公式后面自动添加一个空格
  10. 使用Area(区域)会遇到的问题