数据库的事务隔离等级

由高到低分别是

  1. serializable:在同一个tx内部,select 到数据的时候加读锁和写锁 range-locks 在 where 选中的范围上,直到 tx 结束。否则的话, 会出现 phantom reads —— 一个tx内部两个同样的查询,如果中间混入了另外一个 tx 的插入,则两个查询的结果会不一样。
  2. repeatable reads:select 到数据的时候加读锁和写锁。然而,读锁和写锁只会加在行上不会加在 range 上,会有 phantom reads。
  3. read committed:在select的时候加写锁,写锁跟着tx走,读锁在select之后就放开了。两个交叉的 tx,只要写的 commit了,甭管tx内部同样的读会不一致,以最新的结果为准。
  4. read uncommitted:dirty reads not-yet-committed data

The default isolation level for InnoDB is REPEATABLE READ

数据库的读锁和写锁的概念似乎和 JAVA 的 ReentrantLock 读写锁的概念不一样?

1赞

是的,是两种不同的锁