首页   注册   登录
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 · 72 天前 · 1655 次点击
    这是一个创建于 72 天前的主题,其中的信息可能已经有所发展或是发生改变。
    事务 t1 从用户表查 id=101 的人名字,得到张三。事务 t2 这时候在并发的做事,可能把 id=101 的人名字改王五了。t2 提交了之后。t1 再查,id=101 的人的名字变王五了。这是不可重复读,是不是幻读?

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

    吗?

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

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

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

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

    谢谢
    10 条回复    2020-03-25 15:05:25 +08:00
    fantastM
        1
    fantastM   72 天前   ❤️ 1
    http://hedengcheng.com/?p=771 这是原文,但图片已经失效了,可以看些转载的文章
    ylsc633
        2
    ylsc633   72 天前
    MVCC 和 Next-Key Locks


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

    有答案,请艾特我
    EmdeBoas
        3
    EmdeBoas   72 天前   ❤️ 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   72 天前
    @ylsc633 仅有 mvcc 不能解决当前读下的幻读问题
    silencil
        5
    silencil   72 天前 via Android
    推荐掘金上讲 MySQL 的那本小册,看完绝对不乱。
    mawerss1
        6
    mawerss1   72 天前
    @fantastM 刚想说这篇来着,非常清晰,网上可以搜到转发的,有图片,但是没保留原作者,经典文章,已保存
    noobsheldon
        7
    noobsheldon   72 天前   ❤️ 1
    mawerss1
        8
    mawerss1   72 天前
    @ylsc633 仅仅 mvcc 是说不加读写锁? 我说一个用乐观锁解决,不知道对不对
    Newyorkcity
        9
    Newyorkcity   71 天前
    @fantastM
    @mawerss1
    两位,这篇文章里说 RR 级别不存在幻读?在网页里搜索『不存在幻读现象。』可以定位到原文...这...几乎和常识违背了啊
    mawerss1
        10
    mawerss1   71 天前 via iPhone   ❤️ 1
    @Newyorkcity 当前读的前提下,是不存在幻读的,没有错
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1525 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:51 · PVG 01:51 · LAX 10:51 · JFK 13:51
    ♥ Do have faith in what you're doing.