专业汉语词典知识平台,分享汉字词语知识、历史文学知识解答!

励北网
励北网

数据库隔离级别,MySQL事务的四大隔离级别

来源:小易整编  作者:小易  发布时间:2023-02-28 05:02
摘要:数据库隔离级别,MySQL事务的四大隔离级别前言之前分析一个死锁问题,发现自己对数据库隔离级别理解还不够深入,所以趁着这几天假期,整理一下MySQL事务的四大隔离级别相关知识,希望对大家有帮助~事务什么是事务?事务,由一个有限的数据库操作序...

数据库隔离级别,MySQL事务的四大隔离级别

前言

之前分析一个死锁问题,发现自己对数据库隔离级别理解还不够深入,所以趁着这几天假期,整理一下MySQL事务的四大隔离级别相关知识,希望对大家有帮助~

数据库隔离级别,MySQL事务的四大隔离级别

事务

什么是事务?

事务,由一个有限的数据库操作序列构成,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。

假如A转账给B 100 元,先从A的账户里扣除 100 元,再在 B 的账户上加上 100 元。如果扣完A的100元后,还没来得及给B加上,银行系统异常了,最后导致A的余额减少了,B的余额却没有增加。所以就需要事务,将A的钱回滚回去,就是这么简单。

事务的四大特性

数据库隔离级别,MySQL事务的四大隔离级别

  • 原子性: 事务作为一个整体被执行,包含在其中的对数据库的操作要么全部都执行,要么都不执行。

  • 一致性: 指在事务开始之前和事务结束以后,数据不会被破坏,假如A账户给B账户转10块钱,不管成功与否,A和B的总金额是不变的。

  • 隔离性: 多个事务并发访问时,事务之间是相互隔离的,一个事务不应该被其他事务干扰,多个并发事务之间要相互隔离。。

  • 持久性: 表示事务完成提交后,该事务对数据库所作的操作更改,将持久地保存在数据库之中。

事务并发存在的问题

事务并发执行存在什么问题呢,换句话说就是,一个事务是怎么干扰到其他事务的呢?看例子吧~

假设现在有表:

CREATE TABLE `account`(`id`int(11) NOT NULL,`name` varchar(255) DEFAULT NULL,`balance`int(11) DEFAULT NULL,  PRIMARY KEY (`id`),  UNIQUE KEY `un_name_idx`(`name`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8;

表中有数据:

数据库隔离级别,MySQL事务的四大隔离级别

脏读(dirty read)

假设现在有两个事务A、B:

  • 假设现在A的余额是100,事务A正在准备查询Jay的余额

  • 这时候,事务B先扣减Jay的余额,扣了10

  • 最后A 读到的是扣减后的余额

数据库隔离级别,MySQL事务的四大隔离级别

由上图可以发现,事务A、B交替执行,事务A被事务B干扰到了,因为事务A读取到事务B未提交的数据,这就是脏读。

不可重复读(unrepeatable read)

假设现在有两个事务A和B:

  • 事务A先查询Jay的余额,查到结果是100

  • 这时候事务B 对Jay的账户余额进行扣减,扣去10后,提交事务

  • 事务A再去查询Jay的账户余额发现变成了90

数据库隔离级别,MySQL事务的四大隔离级别

事务A又被事务B干扰到了!在事务A范围内,两个相同的查询,读取同一条记录,却返回了不同的数据,这就是不可重复读。

幻读

假设现在有两个事务A、B:

  • 事务A先查询id大于2的账户记录,得到记录id=2和id=3的两条记录

  • 这时候,事务B开启,插入一条id=4的记录,并且提交了

  • 事务A再去执行相同的查询,却得到了id=2,3,4的3条记录了。

数据库隔离级别,MySQL事务的四大隔离级别

事务A查询一个范围的结果集,另一个并发事务B往这个范围中插入/删除了数据,并静悄悄地提交,然后事务A再次查询相同的范围,两次读取得到的结果集不一样了,这就是幻读。

事务的四大隔离级别实践

既然并发事务存在脏读、不可重复、幻读等问题,InnoDB实现了哪几种事务的隔离级别应对呢?

  • 读未提交(Read Uncommitted)

  • 读已提交(Read Committed)

  • 可重复读(Repeatable Read)

  • 串行化(Serializable)

读未提交(Read Uncommitted)

想学习一个知识点,最好的方式就是实践之。好了,我们去数据库给它设置读未提交隔离级别,实践一下吧~

数据库隔离级别,MySQL事务的四大隔离级别

先把事务隔离级别设置为read uncommitted,开启事务A,查询id=1的数据

set session transaction isolation level read uncommitted;begin;select* from account where id =1;

结果如下:

数据库隔离级别,MySQL事务的四大隔离级别

这时候,另开一个窗口打开mysql,也把当前事务隔离级别设置为read uncommitted,开启事务B,执行更新操作

set session transaction isolation level read uncommitted;begin;update account set balance=balance+20where id =1;

接着回事务A的窗口,再查account表id=1的数据,结果如下:

数据库隔离级别,MySQL事务的四大隔离级别

可以发现,在读未提交(Read Uncommitted) 隔离级别下,一个事务会读到其他事务未提交的数据的,即存在脏读问题。事务B都还没commit到数据库呢,事务A就读到了,感觉都乱套了。。。实际上,读未提交是隔离级别最低的一种。

读已提交(READ COMMITTED)

为了避免脏读,数据库有了比读未提交更高的隔离级别,即读已提交。

数据库隔离级别,MySQL事务的四大隔离级别

把当前事务隔离级别设置为读已提交(READ COMMITTED),开启事务A,查询account中id=1的数据


本文地址:百科问答频道 https://www.neebe.cn/wenda/903503.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


百科问答
小编:小易整编
相关文章相关阅读
  • 数据库管理是什么意思?

    数据库管理是什么意思?

    数据库管理是指通过数据库管理系统来管理、访问存储在数据库中的数据的过程。它也和实现电子档案库、图书馆的相关软件的开发有着密切的联系。数据库管理特别强调数据的独立性和可移植性,从而保证数据的可靠性和安全性。数据库管理的主要作用,是把一些内容...

  • 共享数据库是什么意思?

    共享数据库是什么意思?

    共享数据库是一种常见的开发工作流程,即团队中的所有开发人员都共享某一个数据库的访问权限,都使用该数据库来支持应用程序开发。无需为每个工程师配置基础架构,使安装成本降至最低,因而人们愿意选择它。但由于工程师做出改变的同时不得不承担着影响其他...

  • 公用数据库是什么

    公用数据库是什么

    公共数据库是指数据库软件(如Access、SQLServer等)生成的各种包含元器件信息的表格文件。AltiumDesign通过创建和使用关联数据库DBLib文件,可直接从公共数据库调取元器件并通过连接库文件与公共数据库保持同步更新。公共...

  • 关系型数据库的基本原理是什么

    关系型数据库的基本原理是什么

    关系型数据库采用的是关系模型,即把数据组织成一个或多个表格(称为关系),每个表格包含多个列,每行代表一个记录。这种模型的优点是简单易懂,容易维护,便于数据查询和修改。其次是数据结构,关系型数据库采用的是二维表格结构,每个表格有一个主键用于唯...

  • 云数据库RDS是什么

    云数据库RDS是什么

    关系型数据库(RDS)是一种稳定可靠、可弹性伸缩的在线数据库服务。具有多重安全防护措施和完善的性能监控体系,并提供专业的数据库备份、恢复及优化方案,使您能专注于应用开发和业务发展。关系型数据库(RelationalDatabaseSer...

  • 数据库系统由哪几部分组成,什么是数据库系统

    数据库系统由哪几部分组成,什么是数据库系统

    数据库系统由哪几部分组成,什么是数据库系统各位小伙伴们,最近忙于自己的事情,难得闲下心来想在这里记录些什么,在自己做网络知识相关笔记的时候,才想起自己的知识库里存有之前学习的数据库相关的知识,所幸的是自己的勤快做的笔记能够存留下来,于是自己...

  • 外键约束怎么写,MySql外键约束教程

    外键约束怎么写,MySql外键约束教程

    外键约束怎么写,MySql外键约束教程学习目标掌握外键约束的添加方法知道外键约束字段的添加及删除规则1.多表查询概述l实际开发中,一个项目通常需要很多张表才能完成。l例如:一个商城项目就需要分类表(category)、商品表(product...

  • 关系数据库有哪几种,常用关系数据库介绍

    关系数据库有哪几种,常用关系数据库介绍

    关系数据库有哪几种,常用关系数据库介绍数据库管理系统是用于创建,维护与管理数据库的系统软件,是搭建其他应用环境所必备的软件之一,是软件系统架构的重要组成部分。对于IT人员,不论是开发还是测试人员都是其必须掌握的软件。对于开发可以说是他们吃饭...

  • 周排行
  • 月排行
  • 年排行

精彩推荐