• Mysql 知识点


    Isolation

    隔离级别    脏读(Dirty Read)  不可重复读(NonRepeatable Read) 幻读(Phantom Read)  备注
    未提交读(Read uncommitted) 可能 可能 可能  
    已提交读(Read committed) 不可能 可能 可能  
    可重复读(Repeatable read) 不可能 不可能 不可能 默认隔离级别
    可串行化(Serializable) 不可能 不可能 不可能  
    • 未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据。
    • 提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)。事务内相同的查询,由于中间可能有数据更新,每次结果可能不同。除了外键和重复键校验,没有使用间隙锁,存在幻读。
    • 可重复读(Repeated Read):InnoDB默认级别。一个事务内,相同的查询,都是用该查询第一次产生到镜像,所以保证相同查询到结果相同(mvcc,multi-versioned concurrency control),保证可重复读。使用了gap lock和 next-key lock,保证不存在幻读。同一个事务内,相同查询,中间如果发生对查询结果有影响的操作,第二次相同查询结果会变化。

         https://liuzhengyang.github.io/2017/04/18/innodb-mvcc/

    • 串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞。
    • 脏读:可以读取未提交事务的更改结果。
    • 不可重复读:相同查询,同一条记录,两次查询内容不同。
    • 幻读:相同查询,两次查询记录数量不同。

    幻读与不可重复读的区别:

    https://en.wikipedia.org/wiki/Isolation_%28database_systems%29#Non-repeatable_reads

    查看隔离级别:

    SELECT @@global.transaction_isolation;
    SELECT @@session.transaction_isolation;

    暂停5秒:select sleep(5);

    InnoDB Architecture

    https://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-levels.html

    https://dev.mysql.com/doc/refman/5.7/en/innodb-next-key-locking.html

    https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html

    https://dev.mysql.com/doc/refman/5.7/en/innodb-consistent-read.html

    http://hedengcheng.com/?p=771#_Toc374698310

    https://dev.mysql.com/doc/internals/en/

    排它锁:

    Record Lock:单纯锁定一行,ABC,更新B,锁住B

    Gap Lock:锁定目标记录周边的记录,ABC,更新B,锁住AB、BC,防止在A与B和B与C中间插入记录,防止幻读

    Next-key Lock:锁定目标及周边的记录,ABC,更新B,锁住AB、B、BC,防止在A与B和B与C中间插入记录,防止幻读

  • 相关阅读:
    提取轮廓后的画图处理
    提取视频中的前景物体
    写入视频帧
    处理视频序列
    视频读写
    三维重建-相机标定
    图像拼接相关
    计算两幅图像之间的单应矩阵
    ransac算法(随机抽样一致性)
    图像间投影关系
  • 原文地址:https://www.cnblogs.com/lvjianwei/p/9809844.html
Copyright © 2020-2023  润新知