隐式和显式锁定:
1.innodb 是两阶段锁定协议, 隐式锁定比如在事务的执行过程中. 会进行锁定, 锁只有在 commit 或 rollback 的时候, 才会同时被释放
2. 特定的语句进行显式锁定 select ... lock in share mode ; select ... for update,where 条件里面的必须是主键, 否则会锁整张表
3. 需要用在事务中使用, 并且两个查询都需要 for update 才能阻塞住另一个去读, 也就是实现写锁, 阻塞别的读锁, 悲观排他的目的
4. 如果不想开启事务, 就把 autocommit 关掉, 这样默认就是开启事务了, 每次都要 commit 才行
测试:
会话 1 开启事务, 并且 select ... where id=1 for update
会话 2 也去 select ... where id=1 for update, 会被阻塞, 普通的 select 没有影响
[MySQL] MySQL 的行级显式锁定和悲观锁
来源: http://www.bubuko.com/infodetail-3015944.html