mysql使用for update实现悲观锁

  • 悲观缩:顾名思义比较担心害怕,还没开始就怕出现并发,所以在处理sql之前就将表或具体数据给上锁。
  • 使用for update测试
  • 表数据
  • 表结构

  • 测试

  • 1)sql:

    set autocommit=0;
    BEGIN;
    SELECT * FROM `user` WHERE `name`='zhangsan' for UPDATE;
    -- COMMIT;

  • 1-1)结果

    查询不受影响,整表都被锁住

  • 2)sql:

     

  • 2-1)结果

     

  •  

  • 条件为主键时条件行被锁,查询不受影响
  • 总结:

    当for update的条件字段为索引或者主键的时候,只会锁住索引或者主键对应的行。

    而当for update的字段为普通字段的时候,Innodb会锁住整张表。

    查询不受影响
posted @ 2019-08-15 15:56  Spring先森  阅读(1382)  评论(3)    收藏  举报