平常开发过程中免不了对数据库的操作,并且还会有多个线程同时开启事务后对数据库进行访问,那此时不可避免就会出现多个线程之间交叉访问而导致数据的不一致,通过对数据库的隔离级别进行设置可以保证各线程数据获取的准确性。

在介绍隔离级别之前先要弄清楚数据库在并发事务下会出现的一些状态:

  1. 脏读
    脏读就是一个事务读取了另外一个事务未提交的数据。

    事务2读取了事务1未提交的数据。
  2. 不可重复读
    在同一事务中,两次读取同一数据,得到内容不同。
    例如事务1读取了某个数据,然后事务2更新了这个数据并提交,然后事务1又来读取了一次,那这两次读取的结果就会不一样。
  3. 幻读
    在一个事务的两次查询中数据记录数不一致,例如有一个事务1查询了几列数据,而事务2在此时插入了新的几列数据,事务1在接下来的查询中,就会发现有几列数据是它先前所没有的。

不可重复读是针对于多次读取同一条数据出现不同结果,幻读是多次读取而产生的记录数不一样

为解决上述问题可以给数据库设置响应的隔离界别,有以下5中隔离级别:

  • TRANSACTION_NONE :无事务
  • TRANSACTION_READ_UNCOMMITTED :允许脏读,不可重读,幻读。
  • TRANSACTION_READ_COMMITTED:仅允许读取已提交的数据,即不能脏读,但是可能发生不可重读和幻读。
  • TRANSACTION_REPEATABLE_READ :不可读脏,可重复读(即多次读取数据一致),但是可能发生幻读。
  • TRANSACTION_SERIALIZABLE :串行事务,保证不读脏,可重复读,不可幻读,事务隔离级别最高。

在MySQL数据库中查看当前事务的隔离级别:

select @@tx_isolation;

在MySQL数据库中设置事务的隔离级别:

set tx_isolation='read-uncommitted';
set tx_isolation='read-committed';
set tx_isolation='repeatable-read';
set tx_isolation='serializable';

下面进行相应的测试,cmd打开两个窗口登录mysql,模拟事务1(左)和事务2(右)

1、read-uncommitted
将事务1设置隔离级别为read-uncommitted,并且事务1、事务2同时开启事务,查看bank表中初始的数据。

在事务2中更新 jack 的钱为 1000 但不提交事务,然后两边查询结果。从图中可以看到事务1查询的结果显示数据已更改,也就是读取到事务2未提交的数据,这种情况称之为脏读。

2、read-committed
将事务1设置隔离级别为read-committed,并且事务1、事务2同时开启事务,查看bank表中初始的数据。

在事务2中更新 jack 的钱为 200 但不提交事务,然后两边查询结果。通过设置为read-commited,事务1 将不会读取到事务2未提交的数据,避免了脏读。

3、repeatable-read
在上一步中,事务2更新完后提交数据,然后事务1 事务2再次查询。在事务2提交事务后,事务1(事务1没有提交)前后两次的查询结果不一致了,这里就产生了不可重复的状态(参考上面的定义及示意图)

将事务1设置为repeatable-read,并且事务1、事务2同时开启事务,查看bank表中初始的数据。

在事务2中更新 jack 的钱为 500 提交事务,然后两边查询结果,事务1(事务1不提交事务)中的数据并未受事务2更新的影响,避免了不可重复读的情况。

4、serializable
将事务1设置隔离级别为serializable,并且事务1、事务2同时开启事务。

然后在事务1中执行一个查询语句但不提交事务,接着在事务2中执行一条更新语句,会发现事务2中输入SQL语句按下回车键后SQL语句并未执行,处于等待状态。

只有当事务1提交事务后事务2的SQL语句才会执行,这就是事务的串行化,多个事务排队按照先后顺序依次执行。

以上就是对数据库的隔离级别简单的介绍,有问题欢迎指出~

MySQL 隔离级别相关推荐

  1. MySQL隔离级别--未提交读,提交读,可重复读,序列化--详解(有示例)

    原文网址:MySQL隔离级别--未提交读,提交读,可重复读,序列化--详解(有示例)_IT利刃出鞘的博客-CSDN博客 简介          本文介绍MySQL的事务隔离级别的含义,并用示例说明各个 ...

  2. Mysql 隔离级别配置修改

    Mysql 隔离级别配置修改 一.事务的四个特征(ACID) 二.Mysql的四种隔离级别 三.隔离级别设置修改 题外话 在日常的mysql管理中,一旦确定好隔离级别,很少会去修改的,但遇到特殊情况需 ...

  3. mysql隔离级别 简书_InnoDB 事务隔离级别(Mysql篇)

    前言: Mysql支持MyISAM和InnoDB两种存储引擎,区别在此就不详细说明.此篇是讲述事务,所以切记自己的table是InnDB.此处大坑! 在Mysql InnoDB 中,事务主要有四种隔离 ...

  4. mysql隔离级别加锁情况_MySQL数据库事务各隔离级别加锁情况--read committed amp;amp; MVCC...

    上节回顾 上篇记录了我对MySQL 事务 隔离级别read uncommitted的理解. 这篇记录我对 MySQL 事务隔离级别 read committed & MVCC 的理解. 前言 ...

  5. mysql 隔离级别和锁相关

    mysql数据库中存在三种锁,间隙锁(gap-lock) , 行锁(record-lock),gap-record-lock gap-record-lock 是间隙锁和行锁的组合, 间隙锁(gap l ...

  6. mysql隔离级别与悲观锁、乐观锁

    2019独角兽企业重金招聘Python工程师标准>>> 1.什么是悲观锁,乐观锁 悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性.但随之而来的就是数据库性能的大 ...

  7. mysql隔离级别 简书_数据库事务和四种隔离级别

    什么是事务 事务(Transaction):访问并可能更新数据库中各种数据项的一个程序执行单元(unit),它通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起 ...

  8. mysql隔离级别底层实现_1、深入理解mysql四种隔离级别及底层实现原理(MVCC和锁)...

    一.ACID特性 持久性,我们就不讲了,易懂. 1.原子性 在同一个事务内部的一组操作必须全部执行成功(或者全部失败). 为了保证事务操作的原子性,必须实现基于日志的REDO/UNDO机制:将所有对数 ...

  9. mysql 隔离级别 快照_「数据库架构」三分钟搞懂事务隔离级别和脏读

    重要要点 仅凭ACID或非ACID来思考,还需要知道数据库支持的隔离级别. 标榜为"最终一致"的某些数据库可能返回与任何时间点不一致的结果. 一些数据库提供的隔离级别比您要求的更高 ...

  10. mysql隔离级别 举例_mysql的事务隔离级别举例

    事务是怎么回事,之前已经聊过(参见Oracle事务的隔离),无关哪个数据库,只要提到事务,都是这四种隔离级别.mysql的默认隔离级别是3--可重复读.更重要的是,是否支持事务,跟mysql的存储引擎 ...

最新文章

  1. phpstorm xdebug本地调试断点不生效_phpstudy+phpstrom实现断点
  2. error40无法打开到sql_SQL入门学习,初步认识ADO
  3. MML命令_华为TD-LTE后台常用MML命令操作
  4. Linux 查看进程在哪个CPU上运行
  5. 关于mysql的一些问题_关于mysql的一些细节问题
  6. 关于并查集的个人再次的理解
  7. NLP深度学习:基于TensorFlow实现Skip-Gram模型
  8. java 抽象类 final_final/抽象类/interface
  9. 计算机应用技木就业前京,计算机专业毕业的研究生在京就业情况及启示.doc
  10. css布局与ldquo;切图rdquo;
  11. CSE强契约模式常见问题和应对策略
  12. java分割两个时间段不在同月份
  13. java 改变文件路径_在C#中改变文件路径
  14. Perl Redis 连接测试脚本,获取list长度
  15. 切换计算机管理员身份,管理员身份运行,教您如何设置以管理员身份运行程序...
  16. C#打开外部的exe程序并隐藏窗口、注册退出事件、传递参数
  17. 如何提高电路工作频率
  18. OpenGL ES着色器语言----------------储存修饰符
  19. http代表的是什么?http代表的是什么意思
  20. 英语语法笔记——并列句(二)

热门文章

  1. Python 微服务框架
  2. 编辑部小姐姐 | 凌晨做完PPT又有大新闻!文摘菌佛系工作日常
  3. TypeScript索引签名
  4. 全局变量及其含义php,什么是全局变量
  5. 拾人牙慧篇之——基于HTML5中websocket来实现消息推送功能
  6. 电话销售如何避免打电话被封呢?
  7. Linux文件内容永久显示行号
  8. 晨控带您了解RFID发展历史
  9. 【kafka】@KafkaListener 注解解读
  10. 1.4CAD2017绘图基础