首页 > 数据库 >【十三】MySQL数据库之读现象与事务隔离机制

【十三】MySQL数据库之读现象与事务隔离机制

时间:2023-06-30 20:57:52浏览次数:47  
标签:事务 隔离 数据库 脏读 MySQL 之读 机制

【十三】MySQL数据库之读现象与事务隔离机制

读现象与事务隔离机制

【一】数据库读现象

【1】读现象在本质上来说

  • 是数据库在高并发场景下
  • 多个同时执行的事务带来的影响。

【2】数据库主要有三大常见的读现象:

脏读:
  • 事务1和事务2并发执行
  • 事务1改了数据
  • 事务2读取了以后
  • 但事务1进行了回滚
  • 导致事务2读取的数据有误。
不可重复读:
  • 事务1读取了数据
  • 事务2修改了数据并且提交了
  • 接着事务1再次读取
  • 发现两次的数据不相同
幻读:
  • 本质上说是不可重复读的一种现象
  • 事务1更改或查询了数据
  • 在极短时间内,事务2又插入了一条新的数据
  • 导致事务1在接下来的查询中
  • 就会发现有⼏列数据是它先前所没有的。
解决办法:
  • 要解决脏读
  • 不可重复读和幻读的问题
  • 我们就要引入几个概念:
    • MVCC机制,事务隔离机制和数据库锁机制。

【二】数据库事务隔离机制

  • 事务具有原子性、一致性、隔离性、持久性四大特性
  • 而隔离性顾名思义指的就是事务彼此之间隔离开
    • 多个事务在同时处理一个数据时彼此之间互相不影响
    • 如如果隔离的不够好就有可能会产生脏读、不可重复度、幻读等读现象
  • 为此,隔离性总共分为四种级别
  • 由低到高依次为
    • Read uncommitted(未提交读)
    • Read committed (提交读)
    • Repeatable read(可重复读)
    • Serializable(串行化)
  • 这些级别分别依次解决了
    • 脏读,不可重复读和幻读的问题
  • 而MySQL的存储引擎默认的隔离级别为Repratable read (可重复读)
    • 于是解决了脏读和不可重复读的问题
    • 至于幻读问题
    • MySQL引入了Next-key lock的行级锁来解决,我们将会在下一节里详细叙述

【三】MVCC机制

  • MySQL InnoDB存储引擎
    • 实现的是基于多版本的并发控制协议——MVCC (Multi-Version Concurrency Control) 。
  • MVCC最大的好处是:
    • 读不加锁,读写不冲突。
    • 这个机制解决了数据的脏读问题。
  • MVCC的并发控制的系统中,读操作可分为两类:
    • 当前读和快照读。
  • 快照读:
    • 简单的select操作,属于快照读,不加锁。
  • 当前读:
    • 特殊的读操作,插入/更新/删除操作,属于当前读,需要加锁。

标签:事务,隔离,数据库,脏读,MySQL,之读,机制
From: https://www.cnblogs.com/dream-ze/p/17517788.html

相关文章

  • 【十二】MySQL数据库之事物
    【十二】MySQL数据库之事物事务【一】什么是事务?事务是MySQL的一种机制每开启一个事务都可以往里放入一系列的SQL语句。事务是单个逻辑工作单位执行的一系列操作要么全执行要么全不执行每开一个事务相当于给数据库拍了一张快照这意味着在提交之前可以回滚在......
  • 【1.0】数据库知识点小结数据库初识
    【1.0】数据库知识点小结数据库初识【一】存储数据的演变过程【1】文件存储随意地存放到一个文件中、数据格式也是千差万别的完全取决于个人【2】软件开发目录规范(1)概要限制了存储数据的具体位置建立专门的文件夹存储数据(2)软件开发目录规范binmain.pycon......
  • 【十五】MySQL数据库之多表查询练习题
    【十五】MySQL数据库之多表查询练习题表结构和数据/*NavicatPremiumDataTransferSourceServer:localhostSourceServerType:MySQLSourceServerVersion:50624SourceHost:localhostSourceDatabase:sqlexamTargetServerT......
  • 【2.0】数据库知识点小结数据库进阶
    【2.0】数据库知识点小结数据库进阶【一】存储引擎日常生活中文件格式有很多,并且针对不同的文件格式会有对应不同的存储方式和处理机制针对不同的数据应该有对应的不同的处理机制存储引擎就是不同的处理机制MySQL主要的存储引擎Innodb是MySQL5.5版本之后的默认存储引......
  • 【一】MySQL数据库之引入
    【一】MySQL数据库之引入【一】数据库管理软件的由来基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上。如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件都运行在一台机器上,那么用文件存取数据,并没......
  • 【二】MySQL数据库之下载安装
    【二】MySQL数据库之下载安装【1】Window系统(1)安装1、下载MySQLCommunityServer5.7.16http://dev.mysql.com/downloads/mysql/2、解压如果想要让MySQL安装在指定目录那么就将解压后的文件夹移动到指定目录如:C:\mysql-5.7.16-winx643、添加环境变量【右键......
  • 【四】MySQL数据库之MySQL语句初识
    【四】MySQL数据库之MySQL语句初识有了mysql这个数据库软件就可以将程序员从对数据的管理中解脱出来专注于对程序逻辑的编写mysql服务端软件即mysqld帮我们管理好文件夹以及文件前提是作为使用者的我们需要下载mysql的客户端或者其他模块来连接到mysqld然后使用mys......
  • 【三】MySQL数据库之MySQL软件基本管理
    【三】MySQL数据库之MySQL软件基本管理关于Linux版本的基本管理与破解密码详情:【1】登录,设置密码(1)初始状态下,管理员root,密码为空,默认只允许从本机登录localhost(2)设置密码[root@egon~]#mysqladmin-urootpassword"123"(3)设置初始密码由于原密码为空,因此-p可以......
  • 【五】MySQL数据库之库相关操作
    【五】MySQL数据库之库相关操作库相关操作【一】系统数据库information_schema:虚拟库不占用磁盘空间存储的是数据库启动后的一些参数如用户表信息、列信息、权限信息、字符信息等performance_schema:MySQL5.5开始新增一个数据库:主要用于收集数据库服务器性能参数......
  • 【七】MySQL数据库之记录相关操作
    【七】MySQL数据库之记录相关操作记录相关操作【一】介绍MySQL数据操作:DML在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括使用INSERT实现数据的插入UPDATE实现数据的更新使用DELETE实现数据的删除使用SELECT查询数据以及。本节内容包括:......