0.2 到数据库事务ACID(隔离级别)

面试题点: 讲解ACID

关键字: 隔离级别 无中生有 比喻 猜测 画图
事务隔离级别_背景.jpg

摘要: 本文主要讨论了数据库隔离的隔离级别.

背景: 对于很多概念都不是很清晰,思维比较混乱.里面有很多疑问,我并没有解读,本文仅供参考,希望不要对你造成什么误解.

: 让我们从ACID开始讲起.

  • Atomicity(原子性):一个事务(transaction)中的所有操作,或者全部完成,或者全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。即,事务不可分割、不可约简。

  • Consistency(一致性):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设约束、触发器、级联回滚等。

  • Isolation(隔离性):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

  • Durability(持久性):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

问题

  1. 原子性是什么: 事务和多线程混合在一块,会发生什么? 这就极为混乱了. 先讨论但线程? 多线程走事务,会自动等待?我们是为了理解记忆的.

  2. 原子和一致 .很相似. 我是这样想的 原子都不可改变了, 还会有不一致的情况?

  3. 多线程好像就是对应的 隔离性.

  4. 为什么要持久呢? 难道事务的修改是在内存,防止断电数据写入硬盘? bios的电池可以保持电脑存储的运行吗?

    是什么呢?cpu 短暂需要的电量极小? 停电,工作原件还有瞬间保存的功能? 一次修改? 就是说在事务完成的时候.并提交了. 就不存在断电变化的操作. 持久性就是因为电脑瞬间保存的强大功能? 这和硬件设备有关系吧.

  5. 开始. 去专业名词化.

隔离级别:

  1. 读未提交(Read uncommitted)

  2. 读提交(read committed)

  3. 可重复读(repeatable read)

  4. 串行化(Serializable)

使用BEGIN开启一个事务,使用COMMIT提交一个事务.

1591624973548.png

读不提交: 造成脏读,不可重复读 ,幻读?

读不提交 : (可以在不提交的时候读数据?)可以读,但是不可以提交?隔离了什么? 两个事务,任何时候都可以读,然后拿数据做一些事情.但是不能同时提交,增删改不可以同时.------------>这是排它锁造成的吗? 和行级锁有什么关系. 为什设置这种很弱的隔离级别?

比喻: 自己掌握一个强大的技术. no,写一本修仙秘籍,上交给门派,上交之前其他人可以读. 我这就是共享资源.就是开源,这个比喻太强大了,开源. ‘愿为众生开此道’. 我: ‘邪剑仙’ 这中间得过程,有的人读了错误的数据, 我修订了版本,多次修改版本,这个时间冲突确实我是我的本意,开源必然导致这个问题,你多次确认修改就完事了.

  1. 脏读: 你只读了一遍,tmd老子辛辛苦苦写了这么久,这么多版本,你只看第一次的,脏读怪谁.(耗费资源?费个几把,增加自己的资源,吃几个增加精神力的丹药)

  2. 不可重复读: tmd,这还怪谁? 老子把 法典的一些可能走火入魔的功法删除了.当然不可重复读了,气煞老夫.

  3. 幻读:你纳闷呢,两次看怎么不一样?你没有看我这个数据(功法----linux)的版本号?

读提交: (读的时候不可以是提交中(前)的数据 = 只可以在提交之后才读, 重要的是 ) -->必然不会出现脏读.只有提交之后才可以读,怎么可能读到脏数据? 你读的数据,都是提交了的,否则你就等着.

这两个东西极为容易混乱,必须大量比喻.

比喻 : 我是功法2老头, 嘎嘎,邪老头太几把傻了.开源被人喷, 想把自己写功法的过程记录下来.让那些等不及的小娃娃读, 没有考虑学习人资质嘛,聪明的小家伙太少了. (和开发游戏一样). 我黄药师,就不一样了. 只有稳定版本的,老子提交了,你们才能读.

  1. 不可重复读: 看完评论之后,坑,坑,巨几把坑. 谁写功法不删除一些东西的,老子删了,不是因为会走火入魔,是效率低,什么,效率不低.(一些只看表面的家伙,这些暂时提高效率,你知道后面会对功法进步速度有多大的阻力吗?到时候因为时间不足.无法度过天劫不要怪我).我有可以使这些功法,兼容版本的操作,为什么设置必须散去这部分,才能修炼下一部分是为了谁呀.谁人能懂老夫的一片苦心呀.

  2. 幻读: 应该不会有幻读呀? 有的,请看图.前面一直忽略了一个事务的长度.( 一个事务如果足够长,就可以容纳另一个整体事务 )

事务隔离级别.png

重复读: 自行理会… <卧槽, 读重复 混乱了>

不可重复读?还是可重复读? 如果是重复读就和上面一样了? 如果一个事务读数据,只可以重复读一次.会不会造成数据错误呢? 还是说,如果重复读的数据不一样,或报错,就自动失败,回滚呢? 猜测一下.

[第二种情况] 如果重复读不一样就回滚,那这个事务就失败了?所以名字不可能是这个? 还是这个隔离级别添加了回滚操作? 这算隔离级别?算? [第一种情况] 只使用第一次的数据, 这是在[读提交]的基础上吗? 这个操作,如果对每个数据都进行读两次?(在最后?) —>起名字都是肯定的语气. 前面使用了倒桩的语法吗? 这个如果倒转一下.( 读,重复 ).类似监听? 不知两次读? 一直监控所有的数据,是否变化?
->已经知道会导致.幻读,不会导致其他两个情况.

这样我们可以猜测一下, 什么情况会只导致一种问题,[倒推,逆向思维].------------> 造成问题.是另个事务都结束之后.然后看数据. 不是从中间判断(脏读,不可重复读,幻读)的哦. 小可爱要记清楚了. 重复读就是,如果发现一个数据删除了?重新开始从头执行?那这个回滚,在执行一次没有区别.[ 这一切是建立在一个基础上的,隔离级别一定会导致问题,所以不可以使用,是历史,我们只使用最后一种? ] 扯远了,回归主题.

就是说删除了的数据,可以读了? 还有一种可能,一个事务,知道其他事务存在? 只要有事务结束了,就重新读一些被修改过的数据,如果发现问题,自动回滚.[ 我们是站在减少内存消耗的角度上思考的 ].[ 或许,所有的隔离界别,在出现(各种读)的情况都会回滚? 一切都不知道,猜测. ]

在思考一种情况,然后百度,不猜了,知识薄弱. [不可以重复读] ,所有数据只可以读取一次,[利用修改后的数据,读一次,然后缓存了].不管你是否修改,我都只使用这一份数据. 如果这样.会出现什么情况? 可以重复读了.神奇.很符合最终结果. 有个疑问(第一次读是不存在呢? 这不影响.第一次不存在不管.[应该是建立在读提交上的] 否则 必然导致脏读. 原始存在,第一次读的时候,别人提交完了. <数据算修改过的> 但是**读 是建立在第一读的基础上的,所以无妨 ) -------->到此明了了. 不会存在 (不可重复读)===(数据不存在)这种情况了.

重复读: tmd,巨几把坑,这个名词应该叫做 <读一次> or <读缓存> ? 使用比喻合理化? 查看资料画图? 不想看资料. 咬文嚼字一会. 等.缓存.|这,其实重复和缓存意思很相似 | > 只有自己会想成上面的那种情况:? 就是自己想的监控,监听. 上面思考的所有情况太乱了,画图整理. 自己掉的坑,要整理清楚. 回想之前的监听想法,或许没有道理.

比喻: 还是功法吗? 话说,费曼方法真的累. <费曼> 功法: 双手互搏. 独白. 想要修炼 双手互搏.必须先学会,左手画圆,右手画方. 就是存一个(样本了.)哈哈. 修炼每一缕真气, 不同类型的,都要备份第一次读的,因为真气是多线程修炼的啦, 多缕真气并行啦. 我真是太聪明了. 自然不会导致 不可重复读了.哈哈哈哈.

重复读.png

串行化: 自行理会…

前面没有讨论锁呀,锁的原理.[ 改 增 删 ] 对数据加锁 . [ 读 ] 一般不加锁? 我的猜测就是串行化,加锁.所有数据加锁? 对不对不知道,自己去验证. <有一种状态叫做等待> 这极为重要了呀. 把所有用到的数据都加锁. 这个过程是建立在重复读的基础上吗? <弄一个备份吗?> 分情况 .居然忘记了 ‘读不提交’ 的名称.

–> 加锁的基础上吗? 讨论有点复杂呀,大兄弟,是什么让你坚持了呢?生死.是的.活着就是体验这个世界的.想想那些死去的人. 其实现在应该思考和 4大特性 联系的,懒与做这件事. 回想第2步. 提交读. (这就是监听了所有的事务,并且锁了对象(数据), 才可以实现 读提交这个操作 ) 所以,和锁矛盾吗?不.自己思维不缜密. 还要大量梳理.

  1. 在读提交的基础上:

  2. 在重复读的基础上: 最可能的猜测. 其他略. 序列化,串行化.感觉和流有点相似. 先瞎几把扯一番. 将自己所有的疑问抛出来,然后自己思考. 实现了serialable接口. 为什么可以序列? 有序的队列? 打了一个标记.底层怎么实现呢?有序的队列? 核心---->有序. [按照创造的角度:<事物发展的顺序> 为了解决幻读==>才有了这一切 ]

既然前面有锁. 那就是不断加锁实现呗. <其实把读的功能锁住,一切就没有问题了> 所以序列化,就是锁了读? 就好像,变成水流了.你读个几把. 把数字幻化成流动的水. 我可以一口气举3个例子. 用线串成一个串,你怎么读,串成一条线,在开头禁止. 你什么都不可以操作. <就是私有化,像private?> --想到土地私有化? 想到原始时代,食物的私有化. 闭源.< 这就涉及到了 ‘天道了’ > /世间万物的极端,为了安全,自然闭源头,但是效率低,数据修改不方便,不适合论坛? / 万物,有利有弊. ----------------> 回归 ‘原为众生开此道’

  1. 在 读不提交 基础上:

  2. 空白的基础上:

比喻: 没有什么,就是最普通的,自私的,使用最多的,也是令人厌烦的.同时也是普通的每个人.功法完全完本.

------------>这样想来,这个状态和网文写小说结尾类似呀.


  • 连载(修改) -----> 读不提交

  • 多人合作小说 (提交之后,才能继续写): ------------>读提交

另: 这就不能不提到 江南的历史----> 九州---->(今何在)这个大佬云集的 奇幻世界观.多人写作最后失败.令人 振奋的网文历史.

  • 多人合作小说(先基础版,然后合并 ) ------------->重复读

  • 完本 -------------->串行化

跑题了.#_#.

发现还有很多类似: git,版本管理,多人提交的操作,只要是合作,日常生活的都能看到类似的影子.图就不画了.


脏读: 读的是脏的数据,因为在其他数据没有全执行完,没有提交,然后另一个事务读了,就会造成问题.

脏数据是什么.比喻一下.(像正在洗的衣服.老子tmd没有洗完衣服呢,是谁偷看老子的衣服.)

不可重复读: 第一次读了,有数据,tmd,第二次另一个事务给删除了,这tmd不可以读了,这不是坑我吗.不可重复读了.

( 过桥,过河拆桥,第一次老子看桥是好的, 我们约定好是友军, 你tmd 走了一半,把桥拆了.这tmd能忍? )

幻读:读了两次数据,两次不一样.人很迷幻,梦幻一般.( 和脏读类比 – 脏衣服变成 干净衣服 )

( 幻想着读? 第一次读,是个 很丑的女的, 我幻想第二次读是个 仙女 ,然后居然幻想成,遇到了仙女 )

虽然幻读(对世界是不好的,我的幻想改变了事情本身, 丑女性质 变化, 会被天庭发现? ).但是 没办法.

幻读.书简.记录的是’生死的道的经法’, 原来是作者设置的 ‘幻阵’. 转眼变为石头.(走火入魔的经法)(随机幻 化). 幻简 : 进入幻境的法宝,每天3次进入幻境.时间为2小时.现实世界1刹那.通过 幻读 这个技能进入.

esle

序列化?是隔离级别?-----是串行化,不会造成任何问题. 对应java的吗?

白色图片
事务隔离级别_背景.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值