共享锁、排他锁、行锁(innodb)、页级锁(bdb)、乐观锁、悲观锁、读锁、写锁、

1.2.2. 如何解决幻读?

  • select * from test for update
    • 行级排他锁(没有使用索引时会变成表锁)
  • select * from test lock in share mode
    • 行级共享锁
    • 注意可能会发生死锁

共享锁:又称读锁(lock in share mode),例如select,当上锁之后,另一个线程只可以读,不可以修改。

排他锁:又称写锁(for update),例如update,insert,delete,上锁之后,另一个线程不可以读和修改。

锁的前提有两个:1、必须是mysql的innoDb表。2、必须开启transaction事务。两者都有,锁才会生效。

CAS 版本号和时间戳