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 版本号和时间戳