• update会锁表吗?


    两种情况:

    1.带索引 2.不带索引

    前提:

    1.mysq由于默认是开启自动提交事务,所以首先得查看自己当前的数据库是否开启了自动提交事务。

    命令:select @@autocommit;

    结果如下:

    +--------------+
    | @@autocommit |
    +--------------+
    |            0 |
    +--------------+
    
    • 1
    • 2
    • 3
    • 4
    • 5

    如果是1,那么运行命令:set autocommit = 0;设置为不开启自动提交

    2.当前的数据库表格式如下

    CREATE TABLE `t_goods` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '商品id',
      `goods_name` varchar(16) DEFAULT NULL COMMENT '商品名称',
      `goods_title` varchar(64) DEFAULT NULL COMMENT '商品标题',
      `goods_img` varchar(64) DEFAULT NULL COMMENT '商品图片',
      `goods_detail` longtext COMMENT '商品描述',
      `goods_price` decimal(10,2) DEFAULT '0.00' COMMENT '商品价格',
      `goods_stock` int(11) DEFAULT '0' COMMENT '商品库存,-1表示没有限制',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    显然除了主键,我没有加任何索引

    实际例子:

    1.没有索引

    运行命令

    BEGIN; -- 开启事务;
    update t_goods SET goods_name = 'iPhone' WHERE goods_title = 'iPhone'
    -- 先不commit事务
    
    • 1
    • 2
    • 3

    再开一个窗口,直接运行命令:

    update t_goods SET goods_name = 'HUAWEI' WHERE goods_title = 'HUAWEI'
    
    • 1

    会发现命令卡住了,但是当前面一个事务通过commit提交了,命令就会正常运行结束,说明是被锁表了。

    2.使用索引

    BEGIN; -- 开启事务;
    update t_goods SET goods_name = 'iPhone' WHERE id = 1
    -- 先不commit事务
    
    • 1
    • 2
    • 3

    再开一个窗口,直接运行命令:

    update t_goods SET goods_name = 'HUAWEI' WHERE id = 2
    
    • 1

    发现命令不会卡住,说明没有锁表;

    但是如果另一个也是update t_goods SET goods_name = ‘HUAWEI’ WHERE id = 1;更新同一行,说明是锁行了

    3.总结

    -- 1、条件字段中有一个或多个索引字段,将不会锁表;
    -- 2、条件字段中没有索引字段,将会锁表;
    -- 3、条件中有无索引字段都会锁行;
    -- 4、普通索引也是一样的。并非只有主键索引
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    springboot 集成 Swagger2(速通)
    报表工具使用之FineReport大数据集导出插件
    SAP的一些当说不说的常识
    C++项目-求水仙花数
    基于全志A40i开发板——Linux-RT内核应用开发教程(1)
    阿里云对象存储OSS的使用笔记
    C语言基础-结构体
    Investigating Forgetting in Pre-Trained Representations Through Continual Learning
    element ui 的 el-tab 当使用 router-view 时 mounted 执行了多次
    Mycat+分库分表
  • 原文地址:https://blog.csdn.net/qq_38129621/article/details/127422949