mysql 中select for update 锁表的范围备注

mysql的锁表范围测试

1.主键明确时,行级锁:

  解释:指定主键并且数据存在时,仅锁定指定的行,其它行可以进行操作

  实例:指定了锁定id=1的行且数据存在①,在更新1时lock wait超时②,但是更新id不为1的项目时可以直接更新③,释放锁后④,可以任意更新⑤

 

2.主键不明确时,表级锁:

  解释:指定主键不明确或者数据不存在时,整表锁定

  指定主键不明确包括使用in、not in、<>等 

 

3.使用非主键限定时,表级锁:

  解释:如果where条件中不存在主键限定而采用非主键筛选,全表锁定

 

所以要实现行级锁来实现高并发场景时,必须明确指定主键,否则整个表锁定,影响其它线程操作。

注意:测试时请开两个窗口测试,并且 for update语句要在 begin后 commit前

 

posted @ 2017-10-25 10:10  肖哥哥  阅读(573)  评论(0编辑  收藏  举报
生命不息  奋斗不止  每天进步一点点