通过实例判断mysql update是否会锁表

 更新时间:2020年09月18日 10:49:39   作者:八英里  
这篇文章主要介绍了通过实例判断mysql update是否会锁表,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

两种情况:

1.带索引 2.不带索引

前提介绍:

方式:采用命令行的方式来模拟

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

命令:select @@autocommit;

结果如下:

+————–+
| @@autocommit |
+————–+
| 0 |
+————–+

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

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

tb_user | CREATE TABLE tb_user (
id bigint(20) NOT NULL AUTO_INCREMENT,
name varchar(32) DEFAULT NULL,
phone varchar(11) DEFAULT NULL,
operator varchar(32) DEFAULT NULL,
gmt_create datetime DEFAULT NULL,
gmt_modified datetime DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

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

实际例子:

1.没有索引

运行命令:begin;开启事务,然后运行命令:update tb_user set phone=11 where name=”c1”;修改,先别commit事务。

再开一个窗口,直接运行命令:update tb_user set phone=22 where name=”c2”;会发现命令卡住了,但是当前面一个事务通过commit提交了,命令就会正常运行结束,说明是被锁表了。

2.给name字段加索引

create index index_name on tb_user(name);

然后继续如1里面的操作,也就是一个开启事务,运行update tb_user set phone=11 where name=”c1”;先不提交

然后另一个运行update tb_user set phone=22 where name=”c2”;发现命令不会卡住,说明没有锁表

但是如果另一个也是update tb_user set phone=22 where name=”c1”;更新同一行,说明是锁行了

3.总结

如果没有索引,所以update会锁表,如果加了索引,就会锁行

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 史上最简单的MySQL数据备份与还原教程(中)(三十六)

    史上最简单的MySQL数据备份与还原教程(中)(三十六)

    这篇文章主要为大家详细介绍了史上最简单的MySQL数据备份与还原教程中篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • MySQL数据库如何正确设置主键

    MySQL数据库如何正确设置主键

    主键是用于唯一标识数据库表中每一行数据的一列或一组列,主键可以确保数据的唯一性和完整性,这篇文章主要给大家介绍了关于MySQL数据库如何正确设置主键的相关资料,需要的朋友可以参考下
    2024-04-04
  • 解决MySql不等于的条件过滤字段值为NULL问题

    解决MySql不等于的条件过滤字段值为NULL问题

    今天遇到一个查询结果不对的问题,使用isNull能解决问题,但因查询条件过滤null,还有不同的写法,总结了两种实现方式,希望能给大家一个参考
    2024-12-12
  • MySQL binlog日志清理的方案分享

    MySQL binlog日志清理的方案分享

    Binlog日志非常重要,但是占用的磁盘空间也很大,我们也需要定期的去清理二进制日志,在MySQL数据库中,提供了自动清理Binlog日志的参数,本文给大家详细介绍了MySQL binlog日志清理方案,需要的朋友可以参考下
    2024-01-01
  • 分页技术原理与实现之分页的意义及方法(一)

    分页技术原理与实现之分页的意义及方法(一)

    这篇文章主要介绍了分页技术原理与实现第一篇:为什么要进行分页及怎么分页,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • Mysql中group by 使用中发现的问题

    Mysql中group by 使用中发现的问题

    当使用MySQL的GROUP BY语句时,根据指定的列对结果进行分组,这种情况通常是由于在 GROUP BY 中选择的字段与其他非聚合字段不兼容,或者在 SELECT 子句中没有正确使用聚合函数所导致的,本文给大家介绍Mysql中group by 使用中发现的问题,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • MySQL数据库修复方法(MyISAM/InnoDB)

    MySQL数据库修复方法(MyISAM/InnoDB)

    这篇文章主要为大家整理了7条修复MySQL数据库的方法,当简单的重启对数据库不起作用,或者有表崩溃时,需要的朋友可以参考下
    2014-06-06
  • mysql记录耗时的sql实例详解

    mysql记录耗时的sql实例详解

    这篇文章主要介绍了mysql记录耗时的sql实例详解的相关资料,这里提供实现方法,希望能帮助到大家,需要的朋友可以参考下
    2017-08-08
  • MySQL自动停机的问题处理实战记录

    MySQL自动停机的问题处理实战记录

    这篇文章主要给大家介绍了关于MySQL自动停机的问题处理,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-05-05
  • 详解MySQL存储过程参数有三种类型(in、out、inout)

    详解MySQL存储过程参数有三种类型(in、out、inout)

    MySQL 存储过程参数有三种类型:in、out、inout。它们各有什么作用和特点呢
    2012-07-07

最新评论