数据库update语句到底是行锁还是表锁?

这篇具有很好参考价值的文章主要介绍了数据库update语句到底是行锁还是表锁?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

先说结论:无索引的情况下,如果不走主键,那么update为表锁;有索引的情况下,走索引或者走主键(效果一样),那么update变为行锁。

大致把问题分为两种情况:有索引或者没有索引

没有索引:

不走主键

先建一个没有索引的表,模拟一些数据,并且把事务自动提交关掉。数据库update语句到底是行锁还是表锁?

CREATE TABLE TestTable(
id BIGINT PRIMARY KEY,
name VARCHAR(20),
age int
);

INSERT  INTO testtable(id,name,age) VALUES (1,'李华',20);
INSERT  INTO testtable(id,name,age) VALUES (2,'小明',20);
INSERT  INTO testtable(id,name,age) VALUES (3,'小张',20);
INSERT  INTO testtable(id,name,age) VALUES (4,'小花',19);
INSERT  INTO testtable(id,name,age) VALUES (5,'铃铃',19);
INSERT  INTO testtable(id,name,age) VALUES (6,'莉莉',18);
INSERT  INTO testtable(id,name,age) VALUES (7,'阿花',17);

SHOW VARIABLES LIKE 'autocommit'	-- 观察事务自动提交是否关闭
set autocommit=OFF;	-- 关闭事务自动提交

我们先在第一个查询里执行update一次

数据库update语句到底是行锁还是表锁?

然后我们再新建查询,模拟用户2,执行另一条update

数据库update语句到底是行锁还是表锁?

 由此可见,在没有索引且不走主键的情况下,update是表锁。

走主键

我们再次执行语句,把where后面改成id = xx;(因为id为主键)

数据库update语句到底是行锁还是表锁?

 我们再去查询2中模拟用户2进行更新操作

数据库update语句到底是行锁还是表锁?

 发现用户2也可以完成更新操作,走主键的话update语句变为了行锁(并没有在用户2进行验证更新同一行内容,如有兴趣自行研究,此处只说结论)。

 有索引且走索引:

我们通过下面的语句为数据库加上索引

ALTER TABLE testtable add index idx_age(age);

数据库update语句到底是行锁还是表锁?

 数据库update语句到底是行锁还是表锁?

 由结果可以得知,有索引且走索引时update语句不锁表,而是改为了锁行,为了严谨,我们让用户2执行修改age=17这一行的内容,发现被阻塞,所以可以肯定此时为锁行。

数据库update语句到底是行锁还是表锁?

 好的,实验结束(其实还做了很多相关的实验,但没有展示,此篇仅展示最终结论),开始睡大觉,美好的一天从睡觉开始!文章来源地址https://www.toymoban.com/news/detail-408393.html

到了这里,关于数据库update语句到底是行锁还是表锁?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库到底该如何优化?

    目录 一、硬件和操作系统层面的优化 二、整体架构设计层面的优化 三、MySQL程序配置优化 四、SQL语句优化 一、硬件和操作系统层面的优化 从硬件层面来说,可以通过对 CPU、硬盘内存 、 网络带宽 来优化。 从操作系统来说,可以优化操作系统 网络配置 。一般都是由运维工

    2024年02月04日
    浏览(44)
  • Mysql 数据库DML 数据操作语言—— 对数据库表中的数据进行更改UPDATE 和删除DELETE

        delete语句可以有条件,也可以没有,如果没有条件的话就是删除整张表 delete不可以删除表中某一个字段的值,但是update可以; 

    2024年01月19日
    浏览(54)
  • MySQL数据库精选(从入门使用到底层结构)

    DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段) DML: 数据操作语言,用来对数据库表中的数据进行增删改 DQL: 数据查询语言,用来查询数据库中表的记录 DCL: 数据控制语言,用来创建数据库用户、控制数据库的控制权限 数据定义语言 数据库操作 查询所有数据

    2024年02月19日
    浏览(51)
  • 数据库(mysql语句)循环语句

    例题1: 20到50之间能被5除余1的所有自然数的和   例题2: 实现如下图 代码  例题3: 代码:power表示power(i,j)-----i的j次方 例题4:  实现 代码:  注:substring是从1开始,第一个参数表示要截取的字符串,第二个i和第三个j表示从第i个开始截,截取j个,如:str=HELLO, subs

    2024年02月05日
    浏览(43)
  • 缓存更新策略,先更新数据库还是缓存呢?

    学了这么多,相信大家对缓存更新的策略都已经有了清晰的认识。最后稍稍总结一下。 缓存更新的策略主要分为三种: Cache aside Cache aside 也就是 旁路缓存 ,是比较常用的缓存策略。 (1) 读请求 常见流程 应用首先会判断缓存是否有该数据,缓存命中直接返回数据,缓存未

    2024年02月12日
    浏览(42)
  • SQL 数据库语句- 创建和管理数据库

    SQL CREATE DATABASE 语句用于创建一个新的 SQL 数据库。 以下 SQL 语句创建了一个名为 \\\"testDB\\\" 的数据库: 通过这个简单的语句,你可以成功地创建一个名为 \\\"testDB\\\" 的数据库。记得在实际应用中,你可能需要添加其他选项,比如指定字符集、校对规则等,以满足具体需求。 SQL DRO

    2024年02月05日
    浏览(80)
  • 数据库基础——数据库、数据表和SQL语句

    数据库是用来存储、管理数据的仓库 数据表是数据的存储结构 Structured Query Language,结构化查询语言,用来操作数据库 安装MySQL,自行百度 进入cmd使用命令 mysql -hAddress -uUser -p(Password) 登录数据库 -p后直接回车可进入密文登录 如果出现以下报错,则打开任务管理器-服务-开启

    2024年02月09日
    浏览(74)
  • 分布式数据库HBase,它到底是怎么组成的?

    原文链接:http://www.ibearzmblog.com/#/technology/info?id=8ac4902f82f525e1456624d5d7a545dc 大数据的核心问题无非就是存储和计算这两个。Hadoop中的HDFS解决了数据存储的问题,而HBase就是在HDFS上构建,因此Hbase既能解决大数据存储的问题,又能解决数据实时查询的问题。 HBase是一个高可靠、高

    2024年02月16日
    浏览(38)
  • 公司为什么选择云数据库?它的魅力到底是什么!

    亚马逊云科技提供了100余种产品免费套餐。其中,计算资源Amazon EC2首年12个月免费,750小时/月;存储资源 Amazon S3 首年12个月免费,5GB标准存储容量;数据库资源 Amazon RDS 首年12个月免费,750小时;Amazon Dynamo DB 25GB存储容量 永久免费。) 谈到数据库想必我们都不陌生,其中主流

    2024年02月04日
    浏览(56)
  • 数据库SELECT语句

    SELECT语句 检索单个列 SELECT prod_name FROM products; 检索多个列 SELECT prod_id, prod_name, prod_price FROM products; 检索所有列 SELECT * FROM products; 检索不同的行 DISTINCT SELECT DISTINCT vend_id FROM products; 限制结果 LIMIT 带一个值的LIMIT总是从第一行开始,给出的数为返回的行数。 带两个值的LIMIT可以

    2024年01月15日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包