zoukankan      html  css  js  c++  java
  • MySQL之事务

    MySQL的四种事务
    一、事务的基本要素(ACID)
    • 原子性(Atomicity)
      • 要么都成功,要么都失败
      • 实现机制是undo log
    • 一致性(Consistency)
      • 操作前后,系统稳定,数据一致
    • 隔离性(Isolation)
      • 每个事务都是独立的,相互不会影响
      • 实现机制,多版本并发控制(MVCC)+锁
    • 持久性(Durability)
      • 保证事务的执行结果一定能在数据库中同步完成,无论数据库所在硬件是否瘫痪
      • 实现机制redo log
    • 小结:原子性  持久性  隔离性  实现了一致性  
     
    二、事务的并发问题
    • 更新丢失:a事务中更新一条记录,却被b事务的更新操作给覆盖了。也就是说,a事务的操作没有生效
    • 脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
    • 不可重复读:事务A多次读取统一数据,事务B在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致
    • 幻读:系统管理员A将数据库中的所有学生成绩从具体改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样。
      • 小结:不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需要锁住满足条件的行,解决幻读需要锁表
     
    三、事务的四个隔离级别
    • Read_Uncommited
      • 读未提交:没能解决事务并发操作的脏读、不可重复读、幻读问题
    • Read_commited
      • 读已提交:没能解决事务并发操作的不可重复读,幻读问题
    • Repeatable_Read
      • 可重复读:没能解决事务并发操作的幻读问题
    • Serilizable
      • 序列化读:能解决事务并发操作的所有问题
    • 小结:一般只会用到RC和RR这两个
      
    四、隔离级别实现原理
    • READ_UNCOMMITED 的原理:
    1,事务对当前被读取的数据不加锁;
    2,事务在更新某数据的瞬间(就是发生更新的瞬间),必须先对其加 行级共享锁,直到事务结束才释放。
    例:
    1,事务1读取某行记录时,事务2也能对这行记录进行读取、更新;当事务2对该记录进行更新时,事务1再次读取该记录,能读到事务2对该记录的修改版本,即使该修改尚未被提交。2,事务1更新某行记录时,事务2不能对这行记录做更新,直到事务1结束。
     
    • READ_COMMITED 的原理:
    1,事务对当前被读取的数据加 行级共享锁(当读到时才加锁),一旦读完该行,立即释放该行级共享锁; 
    2,事务在更新某数据的瞬间(就是发生更新的瞬间),必须先对其加 行级排他锁,直到事务结束才释放。
    例:
    1,事务1读取某行记录时,事务2也能对这行记录进行读取、更新;当事务2对该记录进行更新时,事务1再次读取该记录,读到的只能是事务2对其更新前的版本,要不就是事务2提交后的版本。
    2,事务1更新某行记录时,事务2不能对这行记录做更新,直到事务1结束。
     
    • REPEATABLE READ 的原理:
    1,事务在读取某数据的瞬间(就是开始读取的瞬间),必须先对其加 行级共享锁,直到事务结束才释放; 
    2,事务在更新某数据的瞬间(就是发生更新的瞬间),必须先对其加 行级排他锁,直到事务结束才释放。
    例:
    1,事务1读取某行记录时,事务2也能对这行记录进行读取、更新;当事务2对该记录进行更新时,事务1再次读取该记录,读到的仍然是第一次读取的那个版本。 
    2,事务1更新某行记录时,事务2不能对这行记录做更新,直到事务1结束。
     
    • SERIALIZABLE 的原理:
    1,事务在读取数据时,必须先对其加 表级共享锁 ,直到事务结束才释放; 
    2,事务在更新数据时,必须先对其加 表级排他锁 ,直到事务结束才释放。
    例:
    1,事务1正在读取A表中的记录时,则事务2也能读取A表,但不能对A表做更新、新增、删除,直到事务1结束。 
    2,事务1正在更新A表中的记录时,则事务2不能读取A表的任意记录,更不可能对A表做更新、新增、删除,直到事务1结束。
     
     
  • 相关阅读:
    【codevs1515】 跳
    【bzoj1227】 SDOI2009—虔诚的墓主人
    【bzoj3505】 Cqoi2014—数三角形
    【bzoj1059】 ZJOI2007—矩阵游戏
    【poj2122】 Optimal Milking
    【poj2455】 Secret Milking Machine
    【poj3084】 Panic Room
    【poj2699】 The Maximum Number of Strong Kings
    【bzoj3218】 a + b Problem
    【bzoj3122】 Sdoi2013—随机数生成器
  • 原文地址:https://www.cnblogs.com/leisunny/p/11400330.html
Copyright © 2011-2022 走看看