select …for update 除了有查询的作用外,还会加锁呢,而且它是悲观锁。那它会加表锁还是行锁?相信很多人都知道这个结论:要看是不是用了索引/主键。没用索引/主键的话就是表锁,否则就是是行锁。
如果再进一步想,那对索引有无要求,唯一索引、主键索引、普通索引又或是组合索引、组合索引(命中左前缀索引部分),相信很多人就不大清楚了。下来我们就用具体的例子一个个场景来分析下。

准备工作

  • 准备测试表test,如下:

    主键:id;唯一索引组合: id_card,name: 唯一索引;name:普通索引

  • 准备测试数据,如下:

  • 关闭数据库自动提交

场景验证

  • 命中主键场景
    事务1
    查询id = 1数据并锁住
    事务2
    更新id=1数据,提示该行数据被锁

    更新id=2数据,提示更新成功

    结论
    如果查询条件命中了主键,那么select … for update 会进行行锁

  • 命中普通字段
    事务1
    查询age=11数据并锁住
    事务2
    更新age=11数据,提示该数据被锁

    更新age=12数据,也提示该数据被锁

    结论
    如果查询条件命中了普通,那么select … for update 会进行表锁

  • 命中唯一索引(组合索引全部字段)
    事务1
    查询id_card=id_01,name='test1’数据并锁住
    事务2
    更新id_card=id_01,name='test1’数据,提示该数据被锁

    更新id_card=id_02,name='test2’数据,提示更新成功
    结论
    如果查询条件命中了唯一索引,那么select … for update 会进行行锁

  • 命中组合索引(部分字段)
    事务1
    查询id_card=id_01数据并锁住
    事务2
    更新id_card=id_01数据,提示该数据被锁

    更新 id_card=id_04数据,提示更新成功

结论
如果查询条件命中了组合索引(部分字段),那么select … for update 会进行行锁

  • 命中普通索引
    事务1
    查询name=test1数据并锁住

    事务2
    更新name=test1数据,提示该数据被锁

    更新 name=test3数据,提示更新成功

    结论
    如果查询条件命中了普通索引,那么select … for update 会进行行锁

总结

如果查询条件用了索引(无论是索引什么情况)/主键,那么 select … for update 就会进行行锁
如果是普通字段(没有索引/主键),那么 select … for update 就会进行锁表。

select....for update会锁表还是锁行相关推荐

  1. 面试官问:select......for update会锁表还是锁行?

    欢迎关注方志朋的博客,回复"666"获面试宝典 select查询语句是不会加锁的,但是select .......for update除了有查询的作用外,还会加锁呢,而且它是悲观锁 ...

  2. select......for update会锁表还是锁行。

    select查询语句是不会加锁的,但是select .......for update除了有查询的作用外,还会加锁呢,而且它是悲观锁. 那么它加的是行锁还是表锁,这就要看是不是用了索引/主键. 没用索 ...

  3. select……for update会锁表还是锁行

    结果: 如果查询条件用了索引/主键,那么select - for update就会进行行锁. 如果是普通字段(没有索引/主键),那么select - for update就会进行锁表. 例如: 行锁例 ...

  4. select......for update会锁表还是锁行

    select查询语句是不会加锁的,但是 select -for update 除了有查询的作用外,还会加锁呢,而且它是悲观锁. 那么它加的是行锁还是表锁,这就要看是不是用了索引/主键.没用索引/主键的 ...

  5. select......for update会锁表还是锁行?

    select查询语句是不会加锁的,但是select .......for update除了有查询的作用外,还会加锁呢,而且它是悲观锁. 那么它加的是行锁还是表锁,这就要看是不是用了索引/主键. 没用索 ...

  6. select .... for update究竟锁表还是锁行?

    文章目录 介绍 实例验证 实例前准备数据 实例1--验证通过主键索引查询会锁行 实例2--验证通过普通索引作为查询条件会锁行 实例3--验证查询条件不命中索引会锁表 实例4--验证联合索引匹配到第一个 ...

  7. oracle update 锁表还是锁行,for update造成的Oracle锁表与解锁

    我遇到的情况: 当使用select语句查询表时,后面跟着for update , select * from table for update 当修改表中数据,但是没有commit就关掉PL/SQL, ...

  8. Oracle锁表 行级锁 表级锁 行级锁

    2019独角兽企业重金招聘Python工程师标准>>> Oracle锁表  行级锁  表级锁 ---- 行被排他锁定 ----在某行的锁被释放之前,其他用户不能修改此行       ...

  9. mysql行级锁 表级锁 页级锁详细介绍_MySQL行级锁、表级锁、页级锁详细介绍

    页级:引擎 BDB. 表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行 行级:引擎 INNODB , 单独的一行记录加锁 表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写 ...

最新文章

  1. 探究rh6上mysql5.6的主从、半同步、GTID多线程、SSL认证主从复制
  2. udacity 项目3人脸检测
  3. usaco Snail Trails
  4. VUE项目启动:You may use special comments to disable some warnings
  5. 解决vmware“二进制转换和长模式与此平台兼容.....”问题
  6. 不要把a href=当作按钮用
  7. et200sp系统服务器模块,ET200SP GSD文件组态时服务器模块的选择方法
  8. JS实现数组/对象扁平化
  9. 佳能打印服务 android,佳能打印机app
  10. 75 ----平面二次曲线方程的化简: 移轴变换、转轴变换、伸缩变换
  11. 自己实现远程传输文件类
  12. 仿掌阅app打开书籍动画效果
  13. Python3.7,在Anaconda中安装PIL
  14. 2022-2027年中国煤矿安全设备行业市场全景评估及发展战略研究报告
  15. 计算网络节点的平均度
  16. 基于python的国内外研究现状_国内外研究现状评述
  17. ESP8266-Arduino编程实例-PCF8563实时时钟(RTC)驱动
  18. Kotlin实现RxBus3
  19. ES analyzer和search_analyzer的比较
  20. 大数据领域各职业介绍与发展路线

热门文章

  1. python微信库wxpy_python wxpy微信防撤回功能
  2. 芯片短缺蔓延到路由器 网络通信产品出现供货紧张-道合顺大数据Infinigo
  3. MongoDB Data Models 数据结构设计
  4. js反转义html转义字符
  5. 免费分享20套微信小程序源码 源码免费下载【强烈推荐】
  6. 安装Oracle环境不满足最低要求
  7. PMP知识点 挣值分析 EVA
  8. latex加粗斜体无效的解决方法
  9. FreeSwitch系列之内存管理
  10. 暴风看电影出现倒影 Vista故意不兼容?