› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
Newyorkcity
V2EX  ›  MySQL

有没有文章直接指出 MYSQL 四个隔离级别(特别中间两个)下到底怎么上锁,上什么锁的?什么不可重复读,幻读乱七八糟的

  •  
  •   Newyorkcity · Mar 24, 2020 · 3584 views
    This topic created in 2376 days ago, the information mentioned may be changed or developed.
    事务 t1 从用户表查 id=101 的人名字,得到张三。事务 t2 这时候在并发的做事,可能把 id=101 的人名字改王五了。t2 提交了之后。t1 再查,id=101 的人的名字变王五了。这是不可重复读,是不是幻读?

    怎么避免这样的上述的不可重复读呢?我读到的记录,就给它加把排斥写锁的读锁,这样别的事务就改不了它(事务要改记录必须给记录加上写锁的前提下)。不可重复读就问题就解决了

    吗?

    按照上面说的加锁方式,事务 t1 上来查了下用户表里叫李四的有多少个,一查,2 个。事务 t2 与 t1 并发呢,随后插入了一个新的名为李四的用户的记录,提交了。t1 再一查叫李四的几个人,3 个了。这不算不可重复读吗?为什么啊?算幻读吗?为什么啊?

    那隔离级别里的『可重复读』,是上述两个问题都解决了,还是只解决了第一个问题?解决方法和我说的一样吗?

    ============

    所以我真的头大,有没有什么官方文档干脆利落地说清楚,MYSQL 5.7 InnoDB 到底在这两种隔离级别下怎么上锁,上的什么锁。

    谢谢
    11 replies  •  2020-07-28 02:47:56 +08:00
    fantastM
        1
    fantastM  
       Mar 24, 2020   ❤️ 1
    http://hedengcheng.com/?p=771 这是原文,但图片已经失效了,可以看些转载的文章
    ylsc633
        2
    ylsc633  
       Mar 24, 2020
    MVCC 和 Next-Key Locks


    我抛出一个疑问! 仅仅 mvcc 能解决 mysql 的 幻读的问题吗?

    有答案,请艾特我
    EmdeBoas
        3
    EmdeBoas  
       Mar 24, 2020   ❤️ 1
    如果只是想搞清楚相关概念,我建议直接读 ANSI 标准,各类主流数据库在实现的时候都会遵循,也避免掉到具体数据库的实现细节中去:
    https://wiki.hsr.ch/Datenbanken/files/Paper_ANSI_SQL_Isolation_Levels_Stefan_Luetolf_V2_1.pdf

    一篇老而经典的论文:A Critique of ANSI SQL Isolation Levels,里面有指出了 ANSI 标准一些容易让人误解的场景

    认真读完这两个东西,理解会很深刻
    lu5je0
        4
    lu5je0  
       Mar 24, 2020
    @ylsc633 仅有 mvcc 不能解决当前读下的幻读问题
    silencil
        5
    silencil  
       Mar 24, 2020 via Android
    推荐掘金上讲 MySQL 的那本小册,看完绝对不乱。
    mawerss1
        6
    mawerss1  
       Mar 24, 2020
    @fantastM 刚想说这篇来着,非常清晰,网上可以搜到转发的,有图片,但是没保留原作者,经典文章,已保存
    noobsheldon
        7
    noobsheldon  
       Mar 24, 2020   ❤️ 1
    mawerss1
        8
    mawerss1  
       Mar 24, 2020
    @ylsc633 仅仅 mvcc 是说不加读写锁? 我说一个用乐观锁解决,不知道对不对
    Newyorkcity
        9
    Newyorkcity  
    OP
       Mar 25, 2020
    @fantastM
    @mawerss1
    两位,这篇文章里说 RR 级别不存在幻读?在网页里搜索『不存在幻读现象。』可以定位到原文...这...几乎和常识违背了啊
    mawerss1
        10
    mawerss1  
       Mar 25, 2020 via iPhone   ❤️ 1
    @Newyorkcity 当前读的前提下,是不存在幻读的,没有错
    mogami18
        11
    mogami18  
       Jul 28, 2020
    @EmdeBoas 巧了,前不久我刚刚也读了两篇 paper,其中一篇和老兄你推荐的一样。
    Distributed snapshot isolation: global transactions pay globally, local transactions pay locally
    https://dl.acm.org/doi/10.1007/s00778-014-0359-9
    A Critique of ANSI SQL Isolation Levels
    https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr-95-51.pdf
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2572 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 12:53 · PVG 20:53 · LAX 05:53 · JFK 08:53
    ♥ Do have faith in what you're doing.