数据库操作面临的问题:脏读、不可重复读、幻读、更新丢失。

脏读

指一个事务读取了另一个事务未提交的记录。当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中;另外一个事务也访问这个数据,然后使用了这个未提交的数据。因为这个数据还没有提交,那么第二个事务读取到的是脏数据,依据脏数据所做的操作可能是不正确的。

不可重复读

指在一个事务内,多次重复执行某个查询,返回的记录不一致。例如:在一个事务还没有结束时,另外一个事务修改了该数据;在第一个事务中的两次读数据之间,由于第二个事务的修改,导致两次读取到的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。

幻读

指当事务不是独立执行时发生的一种现象,例如:第一个事务对表中的数据进行了批量修改(status=2);同时第二个事务也修改这个表中的数据,向表中插入一行新数据(status=1),插入的数据刚好满足第一个事务的修改条件;操作第一个事务的用户发现表中还存在没有修改的数据行(status=1),就好象发生了幻觉一样。

更新丢失

两个事务都同时更新一行数据,一个事务对数据的更新把另一个事务对数据的更新覆盖了。这是因为系统没有执行任何的锁操作,因此并发事务并没有被隔离开来。


事物隔离级别

为了避免上面出现的几种情况,在标准SQL规范中,定义了4个事务隔离级别,不同的隔离级别对事务的处理不同。

读未提交

读未提交(Read Uncommitted):允许脏读取,但不允许更新丢失。如果一个事务已经开始写数据,则另外一个事务则不允许同时进行写操作,但允许其他事务读此行数据。该隔离级别可以通过“排他写锁”实现。

读已提交

读已提交(Read Committed):允许不可重复读取,但不允许脏读取。这可以通过“共享读锁”和“排他写锁”实现。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。

可重复读取(Repeatable Read)

可重复读取(Repeatable Read):禁止不可重复读取和脏读取,但是有时可能出现幻读数据。这可以通过“共享读锁”和“排他写锁”实现。读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。

串行操作(Serializable)

串行化(Serializable):提供严格的事务隔离。它要求事务串行化执行,事务只能一个接着一个地执行,不能并发执行。仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作的事务访问到。
隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。对于多数应用程序,可以优先考虑把数据库系统的隔离级别设为Read Committed。它能够避免脏读取,而且具有较好的并发性能。尽管它会导致不可重复读、幻读和第二类丢失更新这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制。

标准SQL规范中定义的四个事务隔离级别相关推荐

  1. 【MySQL】MySQL的四种事务隔离级别

    [MySQL]MySQL的四种事务隔离级别 本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的基本要素(ACID) 1.原子性(Atomicity):事 ...

  2. mysql四种事务隔离级别

    mysql事务并发问题 ACID什么的就不啰嗦了.mysql多个事务并发的时候,可能会出现如下问题: 1. 更新丢失 即两个事务同时更新某一条数据,后执行的更新操作会覆盖先执行的更新操作,导致先执行的 ...

  3. mysql四种输入_mysql四种事务隔离级别

    mysql事务并发问题 ACID什么的就不啰嗦了.mysql多个事务并发的时候,可能会出现如下问题: 1. 更新丢失 即两个事务同时更新某一条数据,后执行的更新操作会覆盖先执行的更新操作,导致先执行的 ...

  4. Mysql有四种事务隔离级别,详解脏读、不可重复读、幻读

    Mysql的事务隔离级别 Mysql有四种事务隔离级别,这四种隔离级别代表当存在多个事务并发冲突时,可能出现的脏读.不可重复读.幻读的问题. 脏读 大家看一下,我们有两个事务,一个是 Transact ...

  5. mysql 事务 隔离级别_MySQL的四种事务隔离级别

    https://www.cnblogs.com/huanongying/p/7021555.html 本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的 ...

  6. js hbs mysql_实例分析MySQL下的四种事务隔离级别

    数据库事务有四种隔离级别: 未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据. 提交读(Read Committed):只能读取到已经提交的数据, ...

  7. MySQL 四种事务隔离级别详解及对比--转

    http://www.jb51.net/article/100183.htm 接的隔离级别.它的语法如下: ? 1 SET [SESSION | GLOBAL] TRANSACTION ISOLATI ...

  8. mysql四种事务级别_【MySQL 知识】四种事务隔离级别

    摘要:本篇文章主要是为了对MySQL的四种事务隔离级别的介绍.为了保证数据库的正确性与一致性,数据库事务具有原子性(Atomicity).一致性(Consistency).隔离性(Isolation) ...

  9. mysql选什么隔离级别_互联网项目中mysql应该选什么事务隔离级别

    摘要 企业千万家,靠谱没几家. 社招选错家,亲人两行泪. 祝大家金三银四跳槽顺利! 引言 开始我们的内容,相信大家一定遇到过下面的一个面试场景 面试官:"讲讲mysql有几个事务隔离级别?& ...

  10. 互联网项目中MySQL应该选什么事务隔离级别

    引言 开始我们的内容,相信大家一定遇到过下面的一个面试场景 面试官:"讲讲mysql有几个事务隔离级别?"   你:"读未提交,读已提交,可重复读,串行化四个!默认是可重 ...

最新文章

  1. DOS下读取4GB内存
  2. python3连接mysql,python3连接MySQL数据库实例详解
  3. 微博feed系统的推(push)模式和拉(pull)模式和时间分区拉模式架构探讨
  4. leetcode 718. 最长重复子数组
  5. ajax empty,jQuery empty仅在AJAX调用后的第二次单击时起作用
  6. java线程同步的死锁_Java基础之线程5-线程同步死锁
  7. 关于tcp网络通讯的几个场景的小测试
  8. 语言资源的类别、搜索与搭建策略
  9. select 移动端 第一个无法选中_总结在移动端碰到的坑
  10. 高级代码编辑器:sublime text 4 for Mac
  11. Scala开发教程(16): 没有“break”和“continue”的日子
  12. 2020 时代的开发人员关键词:开源和远程办公
  13. Codeblocks 中文乱码解决方法
  14. 铁路售票系统_黑龙江一学生购买的火车票上惊现“学猪”字样!铁路部门给出回应...
  15. BZOJ 1211: [HNOI2004]树的计数 purfer序列
  16. Geotools之“Hello World”——打开本地shp文件并显示
  17. 卷积神经网络通道剪枝算法小结
  18. 【转】 Pro Android学习笔记(五八):Preferences(2):CheckBoxPreference
  19. python实现3d人物建模_很强!用Python实现3D建模!
  20. 当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心, 因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。

热门文章

  1. 文本分类: 零SHOT学习、跨语言迁移学习、零样本学习
  2. 博士薪资:高学历就一定可以拿高薪吗?
  3. win10 AMD显卡开机长时间黑屏及进入桌面卡顿的解决办法
  4. mapbox token令牌免费申请,‘We‘re sorry! There‘s been an unexpected error. Please try again.’报错解决
  5. 《IT老外在中国》第12期:赛门铁克大中华区掌门梅正宇谈“安全观”
  6. 绘制loss和accuracy曲线
  7. Rosalind第76题:Character-Based Phylogeny
  8. 惨!被恶意侵权投诉,Listing遭下架怎么办?
  9. ZBrush国庆中秋大放价.....
  10. 第三节.下. 电子编程入门到工程师--电子概念视频动画演示