广告
返回顶部
首页 > 资讯 > 数据库 >MySQL事务隔离性
  • 302
分享到

MySQL事务隔离性

MySQL事务隔离性 2017-07-23 10:07:35 302人浏览 无得
摘要

事务隔离性 当多个线程都开启事务操作数据库中数据时,数据库系统要能进行隔离操作,以保证各个线程获取数据的准确性。 如果没有隔离,会发生的几种问题 脏读(Dirty Read) 一个事务处理过程里读取了另一个未提交的事务中的数据

MySQL事务隔离性

事务隔离性

当多个线程都开启事务操作数据库中数据时,数据库系统要能进行隔离操作,以保证各个线程获取数据的准确性。

如果没有隔离,会发生的几种问题

脏读(Dirty Read)

一个事务处理过程里读取了另一个未提交的事务中的数据

不可重复读(NonRepeatable Read)

对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询的间隔期间,另外一个事务修改并提交了该数据。

不可重复读和脏读的区别是,脏读是某一事务读取了另一个事务未提交的脏数据,而不可重复读则是读取了前一事务提交的数据。

在某些情况下,不可重复读并不是问题,比如我们多次查询某个数据当然以最后查询得到的结果为主。但在另一些情况下就有可能发生问题,例如对于同一个数据A和B依次查询就可能不同,A和B就可能打起来了……。

幻读(Phantom Read)

在一个事务中读取到了别的事务插入的数据,导致前后不一致。

事务A 按照一定条件进行数据读取,期间事务B插入了相同搜索条件的新数据,事务A再次按照原先条件进行读取时,发现了事务B 新插入的数据。

不同隔离级别的问题

MySQL的锁类型

表锁

对一整张表加并发能力低下(即使有分读锁、写锁),一般在DDL处理时使用,myisam也是表锁。

行锁

只锁住特定行的数据,并发能力强,Mysql一般都是用行锁来处理并发事务。

如果用到无索引的字段,那么mysql会在存储引擎层面将所有的记录加锁,然后由MySQL Server过滤,如果不满足会调用unlock_row把不满足条件的记录释放锁(这里违背了二段锁协议)。

这种情况同样适用于Mysql的默认隔离级别RR。所以对一个数据量很大的表做批量修改的时候,如果无法使用相应的索引,MySQL Server过滤数据的的时候特别慢,就会出现虽然没有修改某些行的数据,但是它们还是被锁住了的现象。

GAP锁(间隙锁)

MySQL使用索引对行锁两边的区间进行加锁,避免其他事务在这两个区间insert的一种锁。

 

如图所示:数据库中存在值5,30。那么数据库会将数据段切分以下几个区间:

(negative infinity, 5],

(5,30],

(30,positive infinity)

当对值为30这一行加行锁的时候,会同时对(5,30]和(30,positive infinity)加GAP锁。这样其他事务如果想在这两个区间进行insert操作的时候,需要等待本次事务完成。

如果对不存在的数据进行更新,比如更新20(不存在)对应数据行,那么数据库也会对其存在的区间(5,30]加GAP锁。这样,如果有其他事务想插入值为10的数据,需要等待20这个事务完成。

如果使用的是没有索引的字段,那么会给全表加入GAP锁。

Next-Key锁

Next-Key锁是行锁和GAP锁的合并(MySQL使用它来避免幻读)

MVVC(多版本并发控制)

Innodb中的乐观锁实现。通过它提高MySQL的读取操作的性能。并能解决MySQL的重复读问题。

MVVC在每一行记录的后面加两个隐含列(记录创建版本号和删除版本号)。这里的版本号指的是事务的版本号(每个事务启动的时候,都有一个递增的版本号)。

Innodb中事务隔离级别和锁的关系

Innodb通过使用不同的锁来实现事务隔离

避免脏读

通过对数据加行锁或则表锁,使对同一数据进行操作的事务处于等待状态,来避免同时操作

避免不可重复读

通过MVVC实现事务的可重复读

避免幻读

通过Next-Key锁避免产生幻读现象。

MySQL在RC和RR中都避免了幻读现象。

----------------------------------------------------------------------------------------------

悲观锁

乐观锁

在冲突比较少的时候采用乐观锁,减少不需要加锁释放锁的开销,可以提高性能。

在冲突比较多的时候采用悲观锁,减少重复尝试次数,乐观锁重复操作的代价比较大。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL事务隔离性

本文链接: https://www.lsjlt.com/news/5223.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL事务隔离性
    事务隔离性 当多个线程都开启事务操作数据库中数据时,数据库系统要能进行隔离操作,以保证各个线程获取数据的准确性。 如果没有隔离,会发生的几种问题 脏读(Dirty Read) 一个事务处理过程里读取了另一个未提交的事务中的数据 ...
    99+
    2017-07-23
    MySQL事务隔离性
  • 【MySQL】事务及其隔离性/隔离级别
    需要云服务器等云产品来学习Linux的同学可以移步/-->腾讯云-->阿里云-->华为云 show variables like 'autocommit';+---------------+-------+| Variable_name...
    99+
    2023-09-01
    mysql 数据库
  • 事务隔离性和隔离级别
    隔离性是当多个用户并发访问数据库时,比如同时操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离 事务的隔离级别有哪些? 一、概念 Read uncommitted(读未提交) Read ...
    99+
    2021-04-27
    事务隔离性和隔离级别
  • MySQL事务隔离级别
      四类隔离级别    SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。  Read Unc...
    99+
    2022-10-18
  • MySQL 事务的隔离级别
    1. 事务的ACID 事务的ACID是指事务拥有的4个特性的首字母组合:atomicity(原子性), consistency(一致性), isolation(隔离性)和durability(持久性)。 ①atomicity(原子...
    99+
    2019-01-27
    MySQL 事务的隔离级别
  • MySQL的事务隔离级别
    目录数据库事务的四大特性⑴ 原子性(Atomicity)⑵ 一致性(Consistency)⑶ 隔离性(Isolation)⑷ 持久性(Durability)SQL的4种隔离级别Read Uncommitted(读取未提交内容)R...
    99+
    2021-07-07
    MySQL的事务隔离级别
  • mysql事务隔离的级别
    这篇文章主要介绍“mysql事务隔离的级别”,在日常操作中,相信很多人在mysql事务隔离的级别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql事务隔离的级别”的疑惑...
    99+
    2022-10-18
  • SqlServer事务详解(事务隔离性和隔离级别详解) - 熊泽
    概述   不少人对于事务的使用局限于begin transaction:开始事务、commit transaction:提交事务、rollback transaction:回滚事务的初步运用。 并且知道使用事务后, 事务中所有操作命令必须...
    99+
    2019-10-07
    SqlServer事务详解(事务隔离性和隔离级别详解) - 熊泽
  • 聊聊MySQL事务的特性和隔离级别
    网上对于此类的文章已经十分饱和了,那还写的原因很简单——作为自己的理解笔记。 前言   此篇文章作为自己学习MySQL的一些个人理解,使用的引擎是InnoDb。首先先讲讲事务的概念,在《高性能...
    99+
    2022-05-11
    MySQL 事务 MySQL 事务特性 MySQL 事务隔离级别
  • 粗谈MySQL事务的特性和隔离级别
    网上对于此类的文章已经十分饱和了,那还写的原因很简单——作为自己的理解笔记。 前言 ​  此篇文章作为自己学习MySQL的一些个人理解,使用的引擎是InnoDb。首先先讲讲事务的概念,在《高性能MySQL》第三版中其对事务的描...
    99+
    2014-10-16
    粗谈MySQL事务的特性和隔离级别
  • MySQL事务的隔离性是如何实现的
    目录并发场景写-写读-读读-写 和 写-读MySQL中的锁行级锁表级锁隔离级别Read CommittedRepeatable Read参考博客并发场景 最近做了一些分布式事务的项目...
    99+
    2022-11-12
  • mysql事务隔离级别详情
    serializable 串行化(无问题) 事务必须以顺序的方式执行,前一个事务提交之前后面的事务无法进行提交,最安全,但是不能并发操作,导致效率低下. repeatab re...
    99+
    2022-11-12
  • MySQL事务隔离级别详解
    一、什么是事务? 事务是逻辑上的一组操作,要么全执行,要么全不执行。 事务最经典栗子也经常被拿出来的栗子就是银行转账了。比如小明要给小红转账1000元,这个转账会涉及到两个关键操作:将小明的余额减1000元,将小红的余额减1000元。万一这...
    99+
    2023-08-30
    mysql
  • MySQL锁与事务隔离级别
    1、概述 (1)锁的定义 锁是计算机协调多个进程或线程并发访问某一资源的机制。 在数据库中,除了传统的计算资源(如CPU、RAM、IO等)的争用以外,数据也是一种供需要用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据...
    99+
    2021-12-05
    MySQL锁与事务隔离级别
  • MySQL基础——事务隔离级别
    事务是DBMS得执行单位。它由有限得数据库操作序列组成得。但不是任意得数据库操作序列都能成为事务。一般来说,事务是必须满足4个条件(ACID) ①:原子性(Autmic):事务在执行性,要做到“要...
    99+
    2022-10-18
  • Mysql事务隔离实现机制
    事务隔离 隔离性与隔离级别 当数据库上有多个事务同时执行的时候,就可能出现脏读(dirty read)、不可重复读 (non-repeatable read)、幻读(phantom read)的问题,为了解决这些问题,就有 了“隔离级别”的...
    99+
    2017-08-06
    Mysql事务隔离实现机制
  • MySQL事务隔离机制详解
    目录前言一、什么是数据库事务二、事务并发带来的4类问题三、事务4种隔离级别四、mysql演示4种隔离级别总结参考文章:前言 如何控制并发是数据库领域中非常重要的问题之一,MySQL为了解决并发带来的问题,设计了事务隔离机...
    99+
    2022-11-21
    MySQL事务隔离机制 mysql事务隔离
  • 03.事务隔离
       简单来说,事务就是要保证一级数据库操作,要么全部成功,要么全部失败。在MySQL中,事务支持是在引擎层实现的,但MySQL中并不是所有引擎都支持事务,比如Mysql原生的MyISAM引擎就不支持事务。   下面,我们将心InnoDb...
    99+
    2022-01-27
    03.事务隔离
  • 事务隔离(3)
    事务 保证一组数据库操作,要么全部成功,要么全部失败。 ACID特性 原子性:Atomicity 一致性:Consistency 隔离性:Isolation 持久性:Durability 当数据库中有多个事务同时执行的时候,就...
    99+
    2020-06-03
    事务隔离(3)
  • MySQL 事务 异常 事务隔离的级别 - G
    MySQL 事务 异常 事务隔离的级别   事务 在你操作数据库的同时,有可能其他用户还会不断地对数据进行增删改查操作。为了避免并行进行时出现混乱,就产生了“事务”。事务就是要保证一组数据库操作,要么全部成功要么全部失败,以此来保...
    99+
    2021-07-20
    MySQL 事务 异常 事务隔离的级别 - G
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作