mysql使用for update实现悲观锁

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

    表结构

  • mysql使用for update实现悲观锁_第2张图片

    测试

  • 1)sql:

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

  • 1-1)结果mysql使用for update实现悲观锁_第3张图片

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

  • 2)sql:mysql使用for update实现悲观锁_第4张图片

     

  • 2-1)结果mysql使用for update实现悲观锁_第5张图片

     

  • mysql使用for update实现悲观锁_第6张图片

     

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

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

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

    查询不受影响

你可能感兴趣的:(mysql使用for update实现悲观锁)