再说mysql锁:mysql lock in share mode 和 select for update

select ... lock in share mode
select ... for update

注意点:
1.都在事务内起作用;
2.所涉及的是行锁(即innodb引擎);
3.保证当前session事务所锁定的行不会被其他session所修改(这里的修改指更新或者删除);
4.select ... lock in share mode是共享锁,语句如:select * from t where id=2 lock in share mode; 
5.select ... for update是排它锁,语句如:select * from t where id=2 for update;
6.共享锁允许其他事务加共享锁读取,但是,不允许其他事务去做修改,或者加排它锁,而需要注意的是共享锁容易造成死锁;
7.排它锁更加严格,不允许其他事务加共享锁(但可select读该行)或者排它锁,更加不允许其他事务修改加锁的行。

使用情景:
1.select ... lock in share mode
保证所有人查到的数据是最新数据,应用的场景主从库数据的同步;
2.select ... for update 
查到的数据确保是最新数据,并且查到后的数据只允许自己来修改的时候,需要用到 for update 子句,应用的场景库存,并发。


详情mysql官网:
https://dev.mysql.com/doc/refman/5.6/en/innodb-locking-reads.html

 

你可能感兴趣的:(Mysql)