V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
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 · 2020-03-24 18:20:13 +08:00 · 2848 次点击
    这是一个创建于 1705 天前的主题,其中的信息可能已经有所发展或是发生改变。
    事务 t1 从用户表查 id=101 的人名字,得到张三。事务 t2 这时候在并发的做事,可能把 id=101 的人名字改王五了。t2 提交了之后。t1 再查,id=101 的人的名字变王五了。这是不可重复读,是不是幻读?

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

    吗?

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

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

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

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

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


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

    有答案,请艾特我
    EmdeBoas
        3
    EmdeBoas  
       2020-03-24 19:19:46 +08:00   ❤️ 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  
       2020-03-24 19:23:26 +08:00
    @ylsc633 仅有 mvcc 不能解决当前读下的幻读问题
    silencil
        5
    silencil  
       2020-03-24 19:36:57 +08:00 via Android
    推荐掘金上讲 MySQL 的那本小册,看完绝对不乱。
    mawerss1
        6
    mawerss1  
       2020-03-24 19:41:40 +08:00
    @fantastM 刚想说这篇来着,非常清晰,网上可以搜到转发的,有图片,但是没保留原作者,经典文章,已保存
    noobsheldon
        7
    noobsheldon  
       2020-03-24 19:42:55 +08:00   ❤️ 1
    mawerss1
        8
    mawerss1  
       2020-03-24 19:44:21 +08:00
    @ylsc633 仅仅 mvcc 是说不加读写锁? 我说一个用乐观锁解决,不知道对不对
    Newyorkcity
        9
    Newyorkcity  
    OP
       2020-03-25 11:30:01 +08:00
    @fantastM
    @mawerss1
    两位,这篇文章里说 RR 级别不存在幻读?在网页里搜索『不存在幻读现象。』可以定位到原文...这...几乎和常识违背了啊
    mawerss1
        10
    mawerss1  
       2020-03-25 15:05:25 +08:00 via iPhone   ❤️ 1
    @Newyorkcity 当前读的前提下,是不存在幻读的,没有错
    mogami18
        11
    mogami18  
       2020-07-28 02:47:56 +08:00
    @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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   902 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:57 · PVG 05:57 · LAX 13:57 · JFK 16:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.