简单理解:数据库的一致性与四种隔离级别(+MySQL实现)
并行数据库存在着几种常见不一致问题:
1.更新丢失:两个并发的写进程同时修改某内容,一个没修改完提交之后另一个又提交,导致其覆盖了第一个提交的写进程内容。
2.脏读:一个操作读到了另外一个操作没有提交的事物,但这个操作是不准确的,有可能被修改,比如回滚
3.不可重复度:同一次查找中的两次读的结果不一样。这里分为虚读和幻读,虚读是对于单条数据两次读不一样,幻读是第二次读比第一次读的结果集条数增多。
对应的数据库有四种隔离级别:
1.读未提交
写的时候禁止其他进程的写,这样两个写进程不能同时进程,也就不能出现更新丢失的问题。但写的进程不禁止读进程,这就还可能出现读脏数据。
2.读提交
写进程禁止读进程。只有写提交之后才能读,这样就防止了脏读现象的出现。但是注意此时读不禁止写,因为读脏数据和不可重复读不一样,读脏数据是指读到未提交的事物,不可重复度是两次读提交的事物都有可能不一样,读允许写,还会发生不可重复读现象,但是不能发生读脏数据现象。
3.可重复读
读禁止写,这时不会出现不可重复读,即两次读不一样的现象了
4.序列化
最严格的隔离机制,即只能严格的一个操作接一个执行,不能并发了
附加 :
MySQL实现事务的隔离机制:利用数据库锁+MVCC的机制实现。
- 读未提交:加排它锁,但排它锁只组织对其锁定数据加读或写的锁,对于不加锁读的读就不起作用,所以写禁止写,写不禁止读
- 读提交:写用排它锁,读是用MVCC机制,读当前版本,写的时候生成新版本,所以当前被锁住的版本不会出现脏读,但是会出现不可重复读(另一次读也拿到了被写过的最新版本。)
- 可重复读:READ COMMITTED级别不同的是MVCC版本的生成时机,即:一次事务中只在第一次select时生成版本,后续的查询都是在这个版本上进行,称为快照读。写也是只改变了当前版本号,但是select查询仍基于之前的版本号,解决了虚读,即不受改变影响,但插入数据的话,还是会出现幻读现象(条数不一致)。引入了next-Key(当前读)机制,当select为范围的时候,在数据之间加了间隙锁,不允许插入。
再附加:
什么是MVCC:
MVCC(多版本并发控制)多版本并发控制,顾名思义,在并发访问的时候,数据存在版本的概念,可以有效地提升数据库并发能力,常见的数据库如MySQL、MS SQL Server、IBM DB2、Hbase、MongoDB等等都在使用。简单讲,如果没有MVCC,当想要读取的数据被其他事务用排它锁锁住时,只能互斥等待;而这时MVCC可以通过提供历史版本从而实现读取被锁的数据的历史版本,从而避免了互斥等待。InnoDB采用的MVCC实现方式是:在需要时,通过undo日志构造出历史版本。
数据库的几类锁:
共享锁(其他可用但不能改,一般用于读锁),排它锁(其他不能上锁,但没法阻止不上锁的读),行锁(针对索引行),间隙所(针对索引间隙)
增删改都是要加排它锁,只有查select只有显示声明才加锁:
- select: 即最常用的查询,是不加任何锁的
- select ... lock in share mode: 会加共享锁(Shared Locks)
- select ... for update: 会加排它锁
简单理解:数据库的一致性与四种隔离级别(+MySQL实现)的更多相关文章
- 数据库事务 ACID属性、数据库并发问题和四种隔离级别
数据库事务 ACID属性.数据库并发问题和四种隔离级别 数据库事务 数据库事务是一组逻辑操作单元,使数据从一种状态变换到另一种状态 一组逻辑操作单元:一个或多个DML操作 事务处理原则 保证所有事务都 ...
- 数据库操作事物的四大特性以及MySQL数据库的四种隔离级别
1 .事物操作数据库的四大特性(ACID) 1.原子性 (Atomicity) 原子性:就是事物的所包含的所有操作,要么全部成功,要么全部失败回滚. 2.一致性 (Consistency) 一致性:简 ...
- MySQL 四种隔离级别
什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有 ...
- MySql四种隔离级别
什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有 ...
- 面试问烂的 MySQL 四种隔离级别,看完吊打面试官!
阅读本文大概需要 5.6 分钟. 来源:网络 什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操 ...
- MySQL 四种隔离级别详解,看完吊打面试官
转发链接:https://zhuanlan.zhihu.com/p/76743929 什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就 ...
- MySQL面试题--常见的四种隔离级别
什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有 ...
- sql 事务的四种隔离级别
在 SQL 标准中定义了四种隔离级别,每一种级别都规定了一个事务中所做的修改,哪些在事务内和事务间是可见的,哪些是不可见的.较低级别的隔离通常可以执行更高的并发,系统的开销也更低. read unco ...
- SQL Server事务的四种隔离级别
在SQL标准中定义了四种隔离级别,每一种级别都规定了一个事务中所做的修改,哪些是在事务内和事务间可见的,哪些是不可见的.较低级别的隔离通常可以执行更高的并发,系统的开销也更低. 1.未提交读(Read ...
随机推荐
- 云服务器终端命令显示-bash-4.2#怎么解决
原因:删除了root/.bashrc 和 root/.bash_profile两个文件的丢失 解决办法: -bash-4.2# cp /etc/skel/.bashrc /root/ -bash-4. ...
- zookeeper 伪集群安装和 zkui管理UI配置
#=======================[VM机器,二进制安装] # 安装环境# OS System = Linux CNT7XZKPD02 4.4.190-1.el7.elrepo.x86_ ...
- MySQL 8.0 主从同步
一.简介 一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中.MySQL主从复制的基础是主服务器对数据库修改记录二进制日志,从服务器通过主服务器 ...
- Selenium WebDriver使用
目录 介绍 selenium webdriver chromedriver下载安装 1.下载 2.使用 3.测试 WebDriver常用操作 1.浏览器操作 2.窗口和弹框操作 3.cookies 操 ...
- 探讨NET Core数据进行3DES加密或解密弱密钥问题
前言 之前写过一篇<探讨.NET Core数据进行3DES加密和解密问题>,最近看到有人提出弱密钥问题,换个强密钥不就完了吗,猜测可能是与第三方对接导致很无奈不能更换密钥,所以产生本文解决 ...
- css3-pointer-events
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Java基础笔记05-06-07-08
五.今日内容介绍 1.方法基础知识 2.方法高级内容 3.方法案例 01方法的概述 * A: 为什么要有方法 * 提高代码的复用性 * B: 什么是方法 * 完成特定功能的代码块. 02方法的定义格式 ...
- JVM内存管理——总结篇
JVM内存管理--总结篇 自动内存管理--总结篇 内存划分及作用 常见问题 内存划分及作用 程序计数器 线程私有.字节码行号指示器. 执行Java方法,计数器记录的是字节码指令地址:执行本地(Nati ...
- Uni-app实战项目注意事项
注意: (1)本地开启端口 App running at: Local: http://localhost:8080/ Network: http://192.168.31.43:8080/ 后台人员 ...
- 关于点击input框唤醒键盘导致input被遮盖的问题
关于点击input框唤醒键盘导致input被遮盖的问题 这个问题相信大家在实际开发过程当中都有遇见,我自己也遇见过很多次.之前在百度上看见大多数的方法利用的都是键盘唤醒了之后,页面的实际高度会发生变化 ...