mysql四种事务级别_【MySQL 知识】四种事务隔离级别

摘要:本篇文章主要是为了对MySQL的四种事务隔离级别的介绍。为了保证数据库的正确性与一致性,数据库事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。事务的四种隔离级别根据隔离级别由低到高分别为读未提交(READ_UNCOMMITTED)、读已提交(READ_COMMITTED)、可重复读(REPEATABLE_READ)、串行化(SERIALIZABLE)。串行化事物隔离级别可以做到事务 100% 隔离,可避免脏读、不可重复读、幻读的发生,但是对并发性能的影响也是最大的。

一、事务的基础概念

根据维基百科的定义,数据库事务(简称:事务)是数据库管理系统DBMS(Database Management System)执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。

简单来讲,事务是用户定义的一系列有限的数据库操作,这些操作可以视为一个完整的逻辑处理工作单元,要么全部执行,要么全部不执行,是不可分割的工作单元。

例如,在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句或整个程序。事务和程序是两个概念。一般地讲,一个程序中包含多个事务。事务的开始与结束可以由用户显式控制。如果用户没有显式地定义事务,则由DBMS按缺省规定自动划分事务。

数据库事务的使用:

BEGIN TRANSACTION – 开始事务,事务开始保存点

ROLLBACK TRANSACTION – 回滚事务,由于出现错误,回滚数据到事务开始之前

COMMIT TRANSACTION – 提交事务,保存数据到数据库中

数据库事务的目的:

为数据库操作提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。

当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰或者返回不准确的结果。必须保证事务之间独立运行,互不影响。

二、事务的基本要素(ACID)

并非任意对数据库的操作序列都是数据库事务。为了保证数据库的正确性与一致性,数据库事务必须具有以下四个特性(ACID):

原子性(Atomicity):事务的原子性保证事务中包含的一组更新操作是原子的,不可分割的,不可分割是事务最小的工作单位,所包含的操作被视为一个整体,执行过程中遵循要么全部执行,要不都不执行,不存在一半执行,一半未执行的情况。

一致性(Consistency):事务必须满足数据库的完整性约束,且事务执行完毕后会将数据库由一个一致性的状态变为另一个一致性的状态。事务的一致性与原子性是密不可分的,如银行转账的例子 A账户向B账户转1000元钱,首先A账户减去1000元钱,然后B账户增加1000元钱,这两动作是一个整体,失去任何一个操作数据的一致性状态都会遭到破坏,所以这两个动作是一个整体,要么全部操作,要么都不执行,可见事务的一致性与原子性息息相关。

隔离性(Isolation):事务的隔离性要求事务之间是彼此独立的、隔离的。即多个事务并发执行时,一个事务的执行不应影响其他事务的执行。具体到操作是指一个事务的操作必须在一个事务commit之后才可以进行操作。多事务并发执行时,相当于将并发事务变成串行事务,顺序执行,如同串行调度般的执行事务。这里事务通过锁机制来保证它的可串行化。

持久性(Durability):事务的持久性,是指一个事务一旦提交,它对数据库的改变将是永久性的,数据一旦写进了物理磁盘,其他操作将不会对它产生任何影响。即已被提交的事务对数据库的修改应该永久保存在数据库中。

三、事务的并发问题

不同的事务隔离级别状态下,会对数据库的数据产生以下几种影响:

脏读:事务 A 读取了事务 B 更新的数据,然后 B 回滚操作,那么 A 读取到的数据是脏数据。

不可重复读:事务 A 多次读取同一数据,事务 B 在事务 A 多次读取的过程中,对数据作了更新并提交,导致事务 A 多次读取同一数据时,结果不一致。

幻读:系统管理员 A 将数据库中所有学生的成绩从具体分数改为 ABCDE 等级,但是系统管理员 B 就在这个时候插入了一条具体分数的记录,当系统管理员 A 改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样

四、事务的四种隔离级别

读未提(READ_UNCOMMITTED):一个事务还没提交时,它做的变更就能被别的事务看到。最低的事务隔离级别,任何情况都无法保证。

读已提交(READ_COMMITTED):保证一个事物提交后才能被另外一个事务读取,另外一个事务不能读取该事物未提交的数据。可避免脏读的发生,但是可能会造成不可重复读。

可重复读(REPEATABLE_READ):多次读取同一范围的数据会返回第一次查询的快照,即使其他事务对该数据做了更新修改。事务在执行期间看到的数据前后必须是一致的。但如果这个事务在读取某个范围内的记录时,其他事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行,这就是幻读。

串行化(SERIALIZABLE):写会加写锁,读会加读锁。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。这是最高的事务隔离级别,也是最可靠的级别,但是花费的代价也是最高的。该事物隔离级别可以做到事务 100% 隔离,可避免脏读、不可重复读、幻读的发生。

事务隔离级别

英文

脏读

不可重复读

幻读

读未提交

READ_UNCOMMITTED

读已提交(Oracle)

READ_COMMITTED

x

可重复读(MySQL)

REPEATABLE_READ

x

x

序列化读(串行化)

SERIALIZABLE

x

x

x

MySQL默认事务隔离级别是可重复读(REPEATABLE_READ);Oracle 默认事务隔离级别是读已提交(READ_COMMITTED)。

从上面可以看出,隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中Debug调试、异常的概念、异常体系、处理异常的关键字try/catch/finally/throw/throws、多个异常使用捕获并处理的方式、继承关系中处理异常、自定义异常类

Debug调试: bug指程序当中遇到的一些错误异常,Debug指调试bug,找到bug对其解决;debug可以让代码逐行执行,查看代码执行的过程,调试程序中出现的bug或异常。 public class DebugClass {public static void main(Strin…

densenet网络结构_FC-DENSENET用于图像分割学习笔记

近日使用FC Dense Net 做分割,记录学习使用过程。FC-DenseNet 原文链接:https://arxiv.org/abs/1611.09326 《The One Hundred Layers Tiramisu: Fully Convolutional DenseNets for Semantic Segmentation》初次使用此网络,第一眼是被这个名…

mongodb mysql资源占用_如何限制mongodb启动时占用过多内存

默认情况下,mongodb占用的内存大小为:Starting in 3.4, the WiredTiger internal cache, by default, will use the larger of either:50% of RAM minus 1 GB, or256 MB.下面我们来看一下限制mongodb启动时占用内存的方法:新增配置文件 /etc/…

手机网站判断及跳转

现在智能手机上网越来越普遍了,为了获得用户体验增加网站流量,你有必要为你的网站增加一个访问端设备的判断功能,若发现是手机用户访问,则直接跳转到手机站,通过百度的APP site,很容易就可实现这功能。只需…

js ...运算符_「 giao-js 」用js写一个js解释器

前言在这篇文章中,我们将通过 JS 构建我们自己的 JS 解释器,用 JS 写 JS,这听起来很奇怪,尽管如此,这样做我们将更熟悉 JS,也可以学习 JS 引擎是如何工作的!什么是解释器 (Interpreter) ?解释器是在运行时运行的语言求值器,它动态地执行程序的源代码。 解释器解析源代码,从源代…

地区json文件_【小例子】使用jQuery实现省市区三级联动显示,附源码json文件

开发工具-intellij IDEA需求1.实现对json文件的读取。2.可以在省级选择所有省名和直辖市名3.选择一级省名后自动刷新市名4.选择二级市名后自动刷新区名逻辑分析第一步:读取json文件第二步:遍历出所有一级的省名第三步:把遍历出来的省名动态追…

qt 状态栏

有段时间没有写过博客了。假期去上海旅游,所以一直没有能够上网。现在又来到这里,开始新的篇章吧!今天的内容主要还是继续完善前面的那个程序。我们要为我们的程序加上一个状态栏。状态栏位于主窗口的最下方,提供一个显示工具提示…

动态获取textarea后面的p标签_HTML简单标签连起实现的小玩意:

《今天不发知识点,刚被误封了,所有没有太多时间去给整理哈,请谅解》(谢谢欣赏)前面发了那么多HTML标签,今天来玩个小视频,小白也能几分钟就会的,代码没有写好,时间急了点…

elipse+pydev+python开发arcgis脚本程序

环境配置参考:http://www.cnblogs.com/halfacre/archive/2012/07/22/2603848.html 添加arcpy类库、arctoolbox、arcgis-bin如下所示。 windos——preference——pydev 完成环境配置。 二、获取文件路径Python方法 os.getcwd()返回的是当前文件的目录。假如我的代码…

python py2exe_转:py2exe 生成 python 可执行文件

#mysetup.py from distutils.core import setup import py2exe setup(console["helloworld.py"]) 然后按下面的方法运行mysetup.py: python mysetup.py py2exe 上面的命令执行后将产生一个名为dist的子目录,其中包含了helloworld.exe,python24.dll,librar…

BZOJ3427 Poi2013 Bytecomputer

可以YY一下嘛 最后一定是-1, -1, ..., -1, 0, 0, ... 0, 1, 1, ..., 1的一个数列 于是f[i][j]表示到了第i个数,新数列的第j项为-1 or 0 or 1的的最小代价 然后就没有然后了 1 /**************************************************************2 Problem: 3427…

mysql timdir_MYSQL学习笔记——数据类型

mysql的数据类型可以分为三大类,分别是数值数据类型、字符串数据类型以及日期时间数据类型。数值数据类型数值类型又可以分为整型、浮点类型、Decimal。整型mysql的整型可以分为TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,下表给出了每个类型的存储空间…

python编写网页游戏脚本_[大数据]用Python脚本做一些网页游戏中力所能及的自动化任务 - 码姐姐找文...

下面是一段自动登录360传奇霸业游戏的脚本: from pymouse importPyMouseimporttimeimportwebbrowserfrom pykeyboard importPyKeyboard url "http://cqby.wan.360.cn/game_login.php?server_idS577&&srcloginhistory"webbrowser.open_new_tab(ur…

mysql 子查询模糊匹配_sql中的查询(模糊查询,子查询,联表查询)

1、查出每个部门不等于经理的工资select from emp where sal <>all(select min (sal) from emp where jobmanager group by deptno)2select * from emp where sal3select * from emp where sal>all(select min(sal) from emp where jobmanager group by deptno);联表查…

Oracle碎碎念~2

1. 如何查看表的列名及类型 SQL> select column_name,data_type,data_length from all_tab_columns where ownerSCOTT and table_nameEMP;COLUMN_NAME DATA_TYPE DATA_LENGTH --------------- ---------- ----------- EMPNO NUMBER 22 ENAME …

flutter怎么添加ios网络权限_使用Flutter控制蓝牙通讯

背景知识视频教程Dart和Flutter&#xff1a;完整的开发人员指南 - 国外课栈​viadean.comFlutter使用Firestore构建复杂的Android和ios应用 - 国外课栈​viadean.comFlutter的实际项目 - 国外课栈​viadean.com您想使用蓝牙玩物联网设备&#xff0c;但不能在其中放置任何软件吗…

mysql查看服务器版本sql_警告:您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解使用n的正确语法...

我正在将解析器xml编码到mysql错误全名&#xff1a;1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near CHA3871376-ABZ-1, \xd0\x91\xd1\x80\xd0\xbe\xd0\xbd\xd0\xb7\xd0…

【leetcode】Max Points on a Line

Max Points on a Line 题目描述&#xff1a; Given n points on a 2D plane, find the maximum number of points that lie on the same straight line. 解题思路&#xff1a; 1.首先由这么一个O(n^3)的方法&#xff0c;也就是算出每条线的方程&#xff08;n^2&#xff09;&…

python网页结构分析_Python爬虫基础之网页组成解析

当我们用浏览器访问网站时&#xff0c;每个网页的大不相同&#xff0c;你是否想过它为什么会呈现多种不同的样式呢&#xff1f;就让我们一起了解一下网页的基本组成、结构和节点等内容吧&#xff01;网页的组成 网页可以分为三大部分——HTML、CSS和JavaScript。如果把网页比作…

完全开源im框架_【行业资讯】移动端开源 IM 框架 MobileIMSDK v5.0 发布!

一、更新内容简介本次更新为主要版本更新&#xff0c;强势升级&#xff0c;可同时支持TCP、UDP两种协议&#xff0c;精心封装之下&#xff0c;实现一套API、两种协议同时并存。可能是市面上唯一同时支持UDPTCP两种协议的同类IM框架。二、MobileIMSDK简介MobileIMSDK是一套专为移…