V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
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 · May 19, 2020 · 3250 views
    This topic created in 2170 days ago, the information mentioned may be changed or developed.

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

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

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

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

    当然上面说的只适用于可重复读和读已提交的数据库隔离级别
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3578 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 04:52 · PVG 12:52 · LAX 21:52 · JFK 00:52
    ♥ Do have faith in what you're doing.