事务四大特性(ACID)原子性、一致性、隔离性、持久性

特性(ACID) 说明
原子性 一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性 在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作
隔离性 数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
持久性 事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL默认是哪个级别?

多个事务同时操作同一个数据库的相同数据时,可能会导致事务的并发问题。

脏读:一个事务读取了其他事务还没有提交的数据,读到的是其他事务“更新”的数据。
不可重复读:一个事务多次读取,结果不一样。例如下订单,查询库存是1,另一个事务更新库存为100并提交事务,然后再去进行第二次的查询,查询结果却变成了100。
幻读:一个事务读取了其他事务还没有提交的数据,只是读到的是其他事务“插入”的数据。

可以通过设置隔离级别来解决并发问题,MySQL默认的事务隔离级别为repeatable-read。

  • read uncommitted:读未提交。
  • read committed:读已提交。
  • epeatable read:可重复读。需要解决在当前事务查询已提交的结果不变,如果再重新开一个事务,才显示已提交的新的数据。这样就解决了一次事务多次读取的数据是一致的。
  • serializable:串行化。例如,淘宝搜索商品,搜索时暂时没有商品,等到后台加载完数据,其实是可以显示搜索结果的,但是因为串行化隔离性特别好,所以在当前事务,即使是刷新也无法显示,必须等到关闭浏览器重新打开,也就是重新打开一个新的事务才会显示。搜索商品要的是实时刷新,所以没有必要使用串行化隔离级别。

    查看mysql不同隔离级别的测试用例

kafka生产者和消费者的事务

平时我们flink写kafka ,通过checkpoint和two-phase-commit 实现了exactly-once 语义,但是为什么我们下游消费 sink topic, 还能读到 还没有到checkpoint 提交commit的数据呢?
答: 因为kafka的消费者默认的隔离级别是 read_uncommitted ,只要有消息就读,不管是否提交 可以修改隔离级别,来限制。

脏读、不可重复读、幻读相关推荐

  1. mysql 脏读 不可重复读 幻读_mysql事务隔离级别/脏读/不可重复读/幻读详解

    一.四种事务隔离级别 1.1read uncommitted 读未提交 即:事务A可以读取到事务B已修改但未提交的数据. 除非是文章阅读量,每次+1这种无关痛痒的场景,一般业务系统没有人会使用该事务隔 ...

  2. 脏读,不可重复读,幻读区别

    脏读 脏读又称无效数据读出.一个事务读取另外一个事务还没有提交的数据叫脏读. 例如:事务T1修改了一行数据,但是还没有提交,这时候事务T2读取了被事务T1修改后的数据,之后事务T1因为某种原因Roll ...

  3. oracle 脏读,脏读 不可重复读 幻读

    序言 脏读.不可重复读.幻读这几个概念开始接触和学习的时候是在大学学习数据库系统的时候,那时候对这几个专业名词的理解停留在概念文字上,并没有真正使用过实践中,最近工作中涉及到这几个概念方面的知识,就来 ...

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

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

  5. 脏读,不可重复读,幻读区别和避免

    在了解脏读,不可重复度,幻读之前,首先要明白这三种情况的出现都是和数据库并发事务有关联的,如果所有的读写都按照队列的形式进行,就不会出现问题. 名词解析和解决方案 脏读 脏读又称无效数据读出(读出了脏 ...

  6. Mysql如何实现隔离级别 - 可重复读和读提交 源码分析

    Abstract 本文会(1) 演示Mysql的两种隔离级别.  (2) 跟着mysql的源代码来看看它是怎么实现这两种隔离级别的. Mysql的隔离级别 当有多个事务并发执行时, 我们需要考虑他们之 ...

  7. MySQL可重复读和读已提交实现原理,深入理解MVCC。

    1.隔离级别 MySQL中隔离级别分为4种,提未交读.读已提交.可重复读.串行化.同时MySQL默认隔离级别为可重复读. 图片 查看MySQL隔离级别 SELECT @@tx_isolation 设置 ...

  8. 三分钟了解MVCC(InnoDB如何实现可重复读和读已提交)

    快照读和当前读 快照读 快照读是指读取数据时不是读取最新版本的数据,而是基于历史版本读取的一个快照信息(mysql读取undo log历史版本) , 快照读可以使普通的SELECT 读取数据时不用对表 ...

  9. mysql 可重复读和读提交的区别

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

  10. 脏读、重复读、幻读;

    脏读 所谓脏读是指一个事务中访问到了另外一个事务未提交的数据,如下图: 如果会话 2 更新 age 为 10,但是在 commit 之前,会话 1 希望得到 age,那么会获得的值就是更新前的值.或者 ...

最新文章

  1. DELPHI第三方控件及组件大全(安装方法与使用)
  2. unescape解密 php,php 版 模仿 js ,unescape函数解码,escape函数编码的方法
  3. Bootstrap模态框垂直高度居中问题
  4. 汇编语言---计算表达式的值
  5. 实时流(直播流)播放、上墙(大屏播放)解决方案
  6. 菜鸟学习Spring——SpringMVC注解版解析不同格式的JSON串
  7. In-Stream Big Data Processing
  8. Windows下的wget安装
  9. 字符串劈分(含中文)
  10. 华为存储认证怎么样?华为存储认证题库哪里有?
  11. 生成交叉表的SQL基本语句
  12. Vue3 JSON编辑器
  13. AI产品经理的前世今生
  14. 如何利用python3创建数据表_大数据分析如何利用Python创建数据透视表
  15. 计算机英语四六级考试时间,2019年12月英语四六级考试时间
  16. html版权信息c怎么写,网页设计添加版权的语句肿么写
  17. Coldfusion的基础知识
  18. java happen-before_Java happen-before规则
  19. Android接入谷歌广告 - 发现各种坑
  20. linux下使用VSCode的C++添加json问题。

热门文章

  1. 5月6阴阳师服务器维护,阴阳师5月6日维护更新与优化内容一览
  2. Ulink仿真器erase flash failed
  3. 全球销量第一iPhone 11为何能打败安卓手机?
  4. 大端模式和小端模式判断
  5. 多线程设计模式-全面详解(学习总结---从入门到深化)
  6. jQuery学习笔记【黑马程序员】
  7. 官宣!KubeCon+CloudNativeCon荣耀回归
  8. 简单的正片叠底字教程
  9. php wps 读取word内容,PHP-如何使用PHP解析WPS格式的Excel文档
  10. IDEA添加子Module的正确姿势