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
zxc1234
V2EX  ›  MySQL

菜鸟请教一个 mysql 问题

  •  
  •   zxc1234 · 2020-05-19 22:02:56 +08:00 · 2757 次点击
    这是一个创建于 1437 天前的主题,其中的信息可能已经有所发展或是发生改变。

    1.mysql 的在写的时候,会用写锁锁住,比如行锁,锁住这行,那么这时候可以读吗? 如果可以读,那跟 java 的读写锁好像不一样呢?

    4 条回复    2020-05-20 00:16:39 +08:00
    hangszhang
        1
    hangszhang  
       2020-05-19 23:34:41 +08:00
    可以简单的 select ..., mvcc 实现了一致性快照读. 但是不能 select ... for update 或者 select ... lock in share mode
    MOONLIGHTT
        2
    MOONLIGHTT  
       2020-05-19 23:43:34 +08:00
    写锁锁住的时候不能读,因为可能导致资源的 [不一致性] (例如在写某行的时候,假设能读取数据,则在写的不同时刻读出来的数据可能是不同的)。

    另外读锁锁住的资源仍然可读。
    alakey1989
        3
    alakey1989  
       2020-05-19 23:56:45 +08:00
    写锁可以快照读
    xizismile
        4
    xizismile  
       2020-05-20 00:16:39 +08:00 via Android
    mysql 的读分为两种,锁读(读的时候加共享锁或者互斥锁)和一致性读(不加锁的读,又叫快照读)

    一个 session 锁住一行数据之后
    如果另一个 session 使用锁读的话会阻塞,使用一致性读的话,会从多版本快照( mvcc )里面读取数据,不会阻塞

    当然上面说的只适用于可重复读和读已提交的数据库隔离级别
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4216 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:10 · PVG 18:10 · LAX 03:10 · JFK 06:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.