iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >数据库update语句到底是行锁还是表锁?
  • 294
分享到

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

数据库mysqlsql 2023-09-11 08:09:48 294人浏览 泡泡鱼
摘要

先说结论:无索引的情况下,如果不走主键,那么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一次

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

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

走主键

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

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

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

 有索引且走索引:

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

ALTER TABLE testtable add index idx_age(age);

 

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

 好的,实验结束(其实还做了很多相关的实验,但没有展示,此篇仅展示最终结论),开始睡大觉,美好的一天从睡觉开始!

来源地址:https://blog.csdn.net/weixin_73955670/article/details/128787326

您可能感兴趣的文档:

--结束END--

本文标题: 数据库update语句到底是行锁还是表锁?

本文链接: https://www.lsjlt.com/news/402865.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 数据库update语句到底是行锁还是表锁?
    先说结论:无索引的情况下,如果不走主键,那么update为表锁;有索引的情况下,走索引或者走主键(效果一样),那么update变为行锁。 大致把问题分为两种情况:有索引或者没有索引 没有索引: 不走主键 先建一个没有索引的表,模拟一些数据,...
    99+
    2023-09-11
    数据库 mysql sql
  • 面试被问select......for update会锁表还是锁行
    目录验证:结合一下实例验证 select查询语句是不会加锁的,但是select .......for update除了有查询的作用外,还会加锁呢,而且它是悲观锁。...
    99+
    2024-04-02
  • MySQL UPDATE语句是否会导致表被锁定?
    MySQL UPDATE语句是否会导致表被锁定? MySQL 是一个流行的关系型数据库管理系统,广泛用于各种应用程序中。在数据库操作中,UPDATE 语句用于更新表中的数据。但是,一个...
    99+
    2024-03-15
    mysql update 锁定
  • mysql数据库中行级锁、表级锁和页级锁的区别是什么
    这篇文章主要介绍了mysql数据库中行级锁、表级锁和页级锁的区别是什么,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。按粒度可以分为:1、行级锁,MySQL中锁定粒度最细的一种锁,表示只针...
    99+
    2024-04-02
  • Oracle数据库查看锁表语句和解锁的方法示例
    目录一、查看锁表语句二、解锁语句三、查看引起锁表的Sql语句总结 一、查看锁表语句 SELECT sess.sid, sess.serial#, lo.oracle_username, -- 登陆...
    99+
    2023-10-11
    oracle查看被锁的表和解锁 oracle怎么查看锁表 oracle解锁表命令
  • 数据库update语句的作用是什么
    数据库update语句的作用是修改数据库中的数据。通过update语句,可以更新数据库中的一条或多条记录的值。通过指定要更新的表、更...
    99+
    2023-09-05
    数据库
  • oracle数据库查看锁表的sql语句整理
    目录关键表查看锁表的SIDsql1sql2查看锁表执行语句用sid查询单个查询所有加锁的sql查询未提交事务的SQL杀死锁总结 关键表 V$LOCKED_OBJECT :记录锁信息的表v$sessio...
    99+
    2023-10-26
    oracle查看锁表sql语句 oracle 锁表如何查看 oracle查找锁表语句
  • spark数据库锁表的方法是什么
    在Spark中,通常无法像传统关系型数据库那样通过明确的锁表语句来锁定表。但是,可以通过以下方法来模拟锁表操作: 使用DataFr...
    99+
    2024-04-02
  • MySQL数据库InnoDB引擎行级锁锁定范围是什么
    这篇文章主要介绍MySQL数据库InnoDB引擎行级锁锁定范围是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!         ...
    99+
    2024-04-02
  • oracle怎么查看数据库表是否被锁
    要查看数据库表是否被锁定,可以使用以下SQL查询语句: SELECT * FROM V$LOCKED_OBJECT; 这条...
    99+
    2024-05-10
    oracle 数据库
  • 数据库中的索引和锁底层原理是什么
    数据库中的索引和锁底层原理是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 一、索引在之前,我对索引有以下的认知...
    99+
    2024-04-02
  • mysql数据库锁机制是什么
    小编给大家分享一下mysql数据库锁机制是什么,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!并发控制数据库管理系统中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性...
    99+
    2024-04-02
  • 数据库的锁机制是什么
    数据库的锁机制是一种用于保护数据库的一致性和并发操作的机制。它确保数据库中的数据在被多个并发事务访问和修改时保持一致性,避免数据的混...
    99+
    2023-09-20
    数据库
  • show processlist中kill锁表语句与慢sql是怎样的
    本篇文章为大家展示了show processlist中kill锁表语句与慢sql是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。show processlis...
    99+
    2024-04-02
  • MySQL数据库锁定机制是什么
    本篇文章给大家分享的是有关MySQL数据库锁定机制是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1. MySQL 锁定机制简介各存储引擎...
    99+
    2024-04-02
  • MySQ数据库锁定机制是什么
    本篇内容主要讲解“MySQ数据库锁定机制是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQ数据库锁定机制是什么”吧!1. MySQL 锁定机制简介各存...
    99+
    2024-04-02
  • MySQL数据库的锁机制是什么
    本篇内容介绍了“MySQL数据库的锁机制是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!为什么要加锁?...
    99+
    2024-04-02
  • 数据库死锁是如何产生的
    这篇文章主要介绍了数据库死锁是如何产生的,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。死锁(Deadlock)所谓死锁:是指两个或两个以上的进程...
    99+
    2024-04-02
  • mysql查看数据表是否锁定的方法
    小编给大家分享一下mysql查看数据表是否锁定的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!mysql查看数据表是否锁定的方法:首先打开命令提示符,登录mysql;然后在命令提示符中执行...
    99+
    2024-04-02
  • 数据库锁的类型和作用是什么
    数据库锁有以下几种类型和作用:1. 共享锁(Shared Lock):也称为读锁,允许其他事务在共享锁被持有时也能获取共享锁,用于并...
    99+
    2023-09-21
    数据库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作