1.mysql 的在写的时候,会用写锁锁住,比如行锁,锁住这行,那么这时候可以读吗? 如果可以读,那跟 java 的读写锁好像不一样呢?
1
hangszhang 2020-05-19 23:34:41 +08:00
可以简单的 select ..., mvcc 实现了一致性快照读. 但是不能 select ... for update 或者 select ... lock in share mode
|
2
MOONLIGHTT 2020-05-19 23:43:34 +08:00
写锁锁住的时候不能读,因为可能导致资源的 [不一致性] (例如在写某行的时候,假设能读取数据,则在写的不同时刻读出来的数据可能是不同的)。
另外读锁锁住的资源仍然可读。 |
3
alakey1989 2020-05-19 23:56:45 +08:00
写锁可以快照读
|
4
xizismile 2020-05-20 00:16:39 +08:00 via Android
mysql 的读分为两种,锁读(读的时候加共享锁或者互斥锁)和一致性读(不加锁的读,又叫快照读)
一个 session 锁住一行数据之后 如果另一个 session 使用锁读的话会阻塞,使用一致性读的话,会从多版本快照( mvcc )里面读取数据,不会阻塞 当然上面说的只适用于可重复读和读已提交的数据库隔离级别 |