• 思考 | select…for update会锁表还是锁行?


    select查询语句是不会加锁的,但是select ….for update除外。

    问题:

    select …….for update加的是行锁还是表锁?

    带着问题我们继续往下看。

    验证:

    建表sql

    关闭自动提交:

    案例一(主键):

    开启第一个事务:

    第二个事务去更新数据,被阻塞了,长时间拿不到锁报错。

    我们再开启一个事务对另一条id为2的数据进行更新,更新成功。

    案例二 (索引):

    age创建了唯一索引。

    开启第一个事务:

    第二个事务去更新数据,被阻塞了,长时间拿不到锁报错。

    我们再开启一个事务对另一条id为2的数据进行更新,更新成功。

    案例三 (普通字段):

    使用普通的字段name去操作,开启第一个事务。

    第二个事务去更新数据,被阻塞了,长时间拿不到锁报错。

    我们再开启一个事务对另一条id为2的数据进行更新,如果我更新成功了,就是锁行,失败了就是锁表。

    结论:

    如果查询条件用了索引/主键,那么select … for update就会进行行锁。

    如果是普通字段(没有索引/主键),那么select … for update就会进行锁表。

    更多精彩内容,关注我们

    ▼▼

  • 相关阅读:
    PHPstorm配置xdebug问题小记
    PHP 实现遍历出目录及其子文件
    localStorage存、取数组
    关于用户体验
    PHP实现导出Excel文件
    js将一位数组分割成每三个一组
    vue 动态绑定背景图片
    父组件传值给子组件
    数组字符串 转化成 对象
    Vuex 页面刷新后store保存的数据会丢失 取cookie值
  • 原文地址:https://www.cnblogs.com/shujuyr/p/16164164.html
Copyright © 2020-2023  润新知