ACID特性及幻读的理解
事务是关系型数据库的重要特性。它是一个包含了一条或多条SQL语句的逻辑原子单元。一个事务包含的SQL要么全部提交,要么全部回滚。
Oracle 官方文档中对事务的描述如下:
A transaction is a logical, atomic unit of work that contains one or more SQL statements.
A transaction groups SQL statements so that they are either all committed, which means they are applied to the database, or all rolled back, which means they are undone from the database.
而ACID特性是事务必须满足的。ACID是Atomicity,Consistency,Isolation,Durability四个单次的首字母缩写。
Atomicity (原子性):
事务的所有任务都被执行,或者一个也不执行。没有部分交易。
Consistency (一致性):
事务将数据库从一个一致的状态带到另一个一致的状态。
Isolation (隔离性):
在事务提交之前,事务的效果对其他事务是不可见的。
Durability (持久性):
提交的事务所做的更改是永久性的。事务完成后,数据库确保事务中的更改不会丢失。
事务的隔离级别和几种可能存在的问题
脏读
在一个事务中读取到另一个未提交事务中的修改操作。
不可重复读
在一个事务中前后两次相同查询读取到的数据不一致(另一个事务对数据进行了修改并提交)。
幻读
在一个事务中前后两次相同查询渠道的数据量不一致(另一个事务对进行了插入或删除操作并提交)。
很多文章中说 MySQL 的 RR 隔离级别通过 MVCC 避免了出现幻读,这是不准确的。
MVCC 确实避免了两次 select 获得结果的不一致,但是这时候如果进行主键冲突的 insert 操作(隐式查询),就会提示主键冲突。
这就是幻读的魔幻点:查出来的结果告诉我主键不冲突,可以插入,但是实际插入时却操作不成功。
具体实验请看以下文章:
https://www.cnblogs.com/rayso/p/12162699.html
从上面可以看出,事务隔离级别越高(由上往下依次增高),越不会出现问题,但是相应的并发性能就会越低。高等级的隔离级别是通过更加严格的锁来保证的。
MySQL默认的隔离级别是Repeatable read;Oracle默认的隔离级别是Read committed。
MVCC (Multi Version Concurrent Control)
通过UNDO实现,保障隔离性
WAL (Write Ahead Log)
通过REDO实现,保障持久性
ACID特性及幻读的理解的更多相关文章
- mysql系列:加深对脏读、脏写、可重复读、幻读的理解
关于相关术语的专业解释,请自行百度了解,本文皆本人自己结合参考书和自己的理解所做的阐述,如有不严谨之处,还请多多指教. 事务有四种基本特性,叫ACID,它们分别是: Atomicity-原子性,Con ...
- [MySQL]对于事务并发处理带来的问题,脏读、不可重复读、幻读的理解
一.缘由 众所周知MySQL从5.5.8开始,Innodb就是默认的存储引擎,Innodb最大的特点是:支持事务.支持行级锁. 既然支持事务,那么就会有处理并发事务带来的问题:更新丢失.脏读.不可重复 ...
- MySQL中的幻读,你真的理解吗?
昨天接到阿里的电话面试,对方问了一个在MySQL当中,什么是幻读.当时一脸懵逼,凭着印象和对方胡扯了几句.面试结束后,赶紧去查资料,才发现之前对幻读的理解完全错误.下面,我们就聊聊幻读. 要说幻读,就 ...
- MySQL InnoDB四个事务级别 与 脏读、不反复读、幻读
MySQL InnoDB事务隔离级别脏读.可反复读.幻读 希望通过本文.能够加深读者对ySQL InnoDB的四个事务隔离级别.以及脏读.不反复读.幻读的理解. MySQL InnoDB事务的隔离级别 ...
- SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因
原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中 ...
- 事务一致性理解 事务ACID特性的完全解答
A 原子性 事务管理者多个小操作,他们同时完成或者同时不完成就是原子性 C 一致性 一致性,是一个很相对的,很主观的概念, 一致性 描述的是 事务 从一个一致的状态变成 另一个一致的状态. 一致性需 ...
- 深入理解大数据之——事务及其ACID特性
目录 事务简介 事物的定义 事务的目的 事务的状态 事务的ACID属性 ACID简介 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durabi ...
- Mysql加锁过程详解(2)-关于mysql 幻读理解
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...
- Mysql加锁过程详解(3)-关于mysql 幻读理解
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...
随机推荐
- 洛谷 1602 Sramoc问题
Description 话说员工们整理好了筷子之后,就准备将快餐送出了,但是一看订单,都傻眼了:订单上没有留电话号码,只写了一个sramoc(k,m)函数,这什么东西?什么意思?于是餐厅找来了资深顾问 ...
- 非常优秀的Javascript(AJAX) 开发工具:Aptana
非常优秀的Javascript(AJAX) 开发工具:Aptana 下面我要向你介绍一款非常优秀的Javascript(AJAX) 开发工具:Aptana.应为它实在太棒了,所以我忍不住想向你推荐它. ...
- hdu 5734 Acperience(2016多校第二场)
Acperience Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- ]ubuntu开机自动挂载的ntfs硬盘的权限问题
原文地址:ubuntu开机自动挂载的ntfs硬盘的权限问题 在linux操作系统中, 挂载是一个非常重要的功能,使用非常频繁. 它指将一个设备(通常是存储设备)挂接到一个已存在的目录上. (这个目录可 ...
- jieba分词工具的使用方法
作为我这样的萌新,python代码的第一步是:#coding=utf-8 环境:python3.5+jieba0.39 一.jieba包安装方法: 方法1:使用conda安装 conda instal ...
- Windows Community Toolkit 3.0 新功能 在WinForms 和 WPF 使用 UWP 控件
本文告诉大家一个令人震惊的消息,Windows Community Toolkit 有一个大更新,现在的版本是 3.0 .最大的提升就是 WinForm 和 WPF 程序可以使用部分 UWP 控件. ...
- H3C 用debugging ppp all命令调试PPP
- Python数据可视化matplotlib和seaborn
Python在数据科学中的地位,不仅仅是因为numpy, scipy, pandas, scikit-learn这些高效易用.接口统一的科学计算包,其强大的数据可视化工具也是重要组成部分.在Pytho ...
- 基于@AspectJ注解配置切面与基于XML配置切面
1. Waiter目标类 package com.smart.aop.advice.pointcut; public class Waiter { public void greetTo(String ...
- java 利用反射创建对象
创建对象: 1.使用Class对象的newInstance()方法创建该Class对象的实例,此时该Class对象必须要有无参数的构造方法. 2.使用Class对象获取指定的Constructor对象 ...