并发场景下事务会存在那些数据问题?

并发场景下mysql会出现脏读、幻读、不可重复读问题;

1. 脏读 dirty read(读到未提交的数据):

A事务正在修改数据但未提交,此时B事务去读取此条数据,B事务读取的是未提交的数据,A事务回滚。

解决办法
方法1:事务隔离级别设置为:read committed。
方法2:读取时加排它锁(select…for update),事务提交才会释放锁,修改时加共享锁(update …lock in share mode)。加排它锁后,不能对该条数据再加锁,能查询但不能更改数据。mysql InnoDB引擎默认的修改数据语句,update,delete,insert都会自动给涉及到的数据加上排他锁,select语句默认不会加任何锁类型,如果加排他锁可以使用select …for update语句,如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁,共享锁下其它用户可以并发读取,查询数据。但不能修改,增加,删除数据。资源共享。

2.不可重复读 Non-Repeatable read(前后多次读取,数据内容不一致):

 A事务中两次查询同一数据的内容不同,B事务间在A事务两次读取之间更改了此条数据。

解决办法
方法1:事务隔离级别设置为Repeatable read。
方法2:读取数据时加共享锁,写数据时加排他锁,都是事务提交才释放锁。读取时候不允许其他事物修改该数据,不管数据在事务过程中读取多少次,数据都是一致的,避免了不可重复读问题。

3. 幻读 repeatable read(前后多次读取,数据总量不一致):

在同一事务中两次相同查询数据的条数不一致,例如第一次查询查到5条数据,第二次查到8条数据,这是因为在两次查询的间隙,另一个事务插入了3条数据。

解决办法
方法1:事务隔离级别设置为serializable ,那么数据库就变成了单线程访问的数据库,导致性能降低很多。
Isolation 属性一共支持五种事务设置,具体介绍如下:

DEFAULT: 使用数据库设置的隔离级别 ( 默认 ) ,由 DBA 默认的设置来决定隔离级别 .

READ_UNCOMMITTED: 会读到未提交的数据, 出现脏读、不可重复读、幻读 ( 隔离级别最低,并发性能高 )。

READ_COMMITTED: 不会读到未提交的数据,会出现不可重复读、幻读问题(锁定正在读取的行)

REPEATABLE_READ :会出幻读(锁定所读取的所有行)

SERIALIZABLE :保证所有的情况不会发生(锁表)。

MYSQL专题: 脏读、幻读、不可重复读区别及解决方案相关推荐

  1. mysql 中的脏读与幻读_一文带你理解脏读,幻读,不可重复读与mysql的锁,事务隔离机制...

    首先说一下数据库事务的四大特性 1 ACID 事务的四大特性是ACID(不是"酸"....) (1) A:原子性(Atomicity) 原子性指的是事务要么完全执行,要么完全不执行 ...

  2. mysql 可重复读 悲观锁_一文带你理解脏读,幻读,不可重复读与mysql的锁,事务隔离机制...

    首先说一下数据库事务的四大特性 1 ACID 事务的四大特性是ACID(不是"酸"....) (1) A:原子性(Atomicity) 原子性指的是事务要么完全执行,要么完全不执行 ...

  3. MySQL --- 19♪ 进阶15 TCL事务控制语言--建立结束事务/设置断点--默认隔离级别--脏读/幻读/不可重复读

    #TCL事物控制语言 : /*   Transaction control language : 事物控制语言   事务:     一个或者一组sql语句组成一个执行单元,这个执行单元要么全部执行,要 ...

  4. mysql悲观锁会有脏数据吗_一文带你理解脏读,幻读,不可重复读与mysql的锁,事务隔离机制...

    首先说一下数据库事务的四大特性 1 ACID 事务的四大特性是ACID(不是"酸"....) (1) A:原子性(Atomicity) 原子性指的是事务要么完全执行,要么完全不执行 ...

  5. 数据库几个事务相关的知识点(脏读幻读不可重复读以及如何避免)

    0. 设置MYSQL的隔离界别 # 查询数据库当前事务隔离级别 mysql> select @@global.transaction_isolation,@@transaction_isolat ...

  6. 事务的4种隔离级别,3大问题,脏读幻读不可重复读

    一.数据库事务隔离级别 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted .Read committed .Repeatable read .Serializable ,这四 ...

  7. 脏读幻读不可重复读的区别

    1.脏读:脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据. 例如: 张三的工资为5000,事务A中把他的工 ...

  8. 脏读 幻读 不可重复读 及其解决方法

    一个事务读到另外一个事务还没有提交的数据,我们称之为脏读.解决方法:把事务隔离级别调整到READ COMMITTED 一个事务先后读取同一条记录,但两次读取的数据不同,我们称之为不可重复读.解决方法: ...

  9. mysql不可重复读和重复读_MySql隔离级别:RU / RC / RR / S + 脏读 / 不可重复读 / 幻读 / 可重复读...

    MySQL 事务 本文所说的 MySQL 事务都是指在 InnoDB 引擎下,MyISAM 引擎是不支持事务的. 数据库事务指的是一组数据操作,事务内的操作要么就是全部成功,要么就是全部失败,什么都不 ...

  10. mysql数据库的事务 acid 隔离级别 脏读 脏写 幻读 不可重复读

    事务的四大特征 原子性(atomicity):要么全部提交(commit),要么全部回滚(rollback) 一致性(consistency):数据从一个合法状态转换成另一种合法状态 隔离性(isol ...

最新文章

  1. 帝国cms调用缩略图和具体文章的方法
  2. 学习微信小程序之css14浮动的特性
  3. DataSnap 2009 系列之二 (方法篇)
  4. 可滚动Widget SingleChildScrollView
  5. 学Python从业前景如何?工作机会多吗?
  6. App Store审核被拒的23个理由
  7. 华南师范大学计算机学院保研,保研学霸专访
  8. 计算机电脑配置组装心得,自己如何组装电脑主机?diy电脑组装教程图解详细步骤+装机心得(4)...
  9. 计算机网络怎么查看连接打印机驱动,怎么检查电脑中是否已成功连接网络打印机...
  10. 3无重复字符的最长子串longest-substring-without-repeating-characters
  11. Java实验3 第十二题:财务应用程序:信用卡号的合法性
  12. 文件系统FATFS的移植教程
  13. 【前端】性能优化 - WebP
  14. 3d游戏建模基础教程:3D建模应用领域和四种常用建模方法
  15. 苹果mac可引导系统镜像下载
  16. mysql linux 监控工具_细说linux服务器各种监控工具
  17. Python基于Django的毕业设计论文提交过程管理系统
  18. m认知无线电信号检测算法matlab仿真,能量检测,循环平稳检测以及自相关检测
  19. 如何快速获取已发表学术论文的期刊封面及目录(caj格式下载和caj转pdf)
  20. ae导出gif插件_GifGun插件|Aescaripts GifGun(ae输出gif插件)下载v1.7.7免费版 - 欧普软件下载...

热门文章

  1. SQL添加一个新列并给默认值
  2. sql 添加列、删除列、修改列属性以及大小
  3. Java游戏《飞机大战》
  4. IQueryable查询器扩展Expression动态排序
  5. 如何做好售前技术支持工作(转载)
  6. 某部门内部网络拓扑图
  7. 【github】解决git克隆/上传速度过慢
  8. 一文搞懂 MySQL 索引
  9. Android 天天动听 悬浮歌词(迷你歌词)效果解读
  10. 什么样的软文是好软文?好软文有哪些共性?