首页 > 数据库 >mysql中update会锁表吗

mysql中update会锁表吗

时间:2023-05-30 19:35:56浏览次数:48  
标签:事务 会锁表 mysql update 开启 索引 提交 MySQL

MySQL 中的 update 操作会不会锁表是一个值得关注的问题,因为这会影响到并发性能和系统的响应速度。本文将从两个方面探讨这个问题:一是有没有索引的情况下,二是 MySQL 开启了自动提交事务和手动提交事务的情况下。
首先,在没有索引的情况下,MySQL 的 update 操作会锁整个表。这是因为在数据库中有一个机制叫做“悲观锁”,即默认情况下 MySQL 会认为其他事务会随时更新这个表,因此会先锁住整个表再执行修改操作,以保证数据的一致性和完整性。
但是,如果在表的字段上建立了索引,MySQL 就会使用“乐观锁”的机制,即只锁住需要修改的行,而不是整个表。这是因为索引可以让 MySQL 快速定位需要修改的行,而不需要扫描整个表,从而降低了锁定表的成本。
其次,MySQL 的事务提交方式也会影响 update 操作是否会锁表。当 MySQL 开启自动提交事务时,每一个 SQL 语句都会自动开启和提交一个事务,这样就会频繁地锁表,导致系统响应速度慢。而当手动提交事务时,需要我们在执行修改操作之前手动开启事务,执行完毕后再手动提交事务,这样可以尽量减少锁表的时间,提高系统并发性能。
总的来说,MySQL 中的 update 操作会不会锁表取决于表是否有索引以及事务提交方式。如果没有索引或者开启了自动提交事务,那么 update 操作会锁定整个表;如果有索引或者手动开启了事务,update 操作只会锁定需要修改的行,而不是整个表。因此,在实际的开发中,我们应该根据具体情况来选择最优的方案,以提高系统性能和响应速度。

标签:事务,会锁表,mysql,update,开启,索引,提交,MySQL
From: https://www.cnblogs.com/jelly12345/p/17444183.html

相关文章

  • MySQL之常用函数介绍
    一:函数的简介函数可以把我们经常使用的代码封装起来,需要的时候直接调用即可。这样既提高了代码效率,又提高了可维护性。在SQL中我们也可以使用函数对检索出来的数据进行函数操作。使用这些函数,可以极大地提高用户对数据库的管理效率。我们在使用SQL语言的时候,不是直接和这门......
  • mysql执行优化器
    sql这个ql看着给人感觉t表是驱动表,其实优化器优化后trc才是驱动表,因为t的查询条件筛选出来有50多万,二trc筛选只有几千条explainselectdistinctt.`id`as"id",t.deletedas"deleted",t.noas"no",ru.nameas"requester_name",tm.solve_minutesas"ticketMetric......
  • MySQL之DQL数据查询操作
    一:SQL概述及规范SQL(StructuredQueryLanguage,结构化查询语言)是使用关系模型的数据库应用语言,与数据直接打交道,由IBM上世纪70年代开发出来。后由美国国家标准局(ANSI)开始着手制定SQL标准,先后有SQL-86,SQL-89,SQL-92,SQL-99等标准。SQL有两个重要的标准,分别是SQL92和SQL99,它们......
  • mysql索引损坏,Record in index `log_time` of table `lts`.`lts_job_log_po` was not
    【1】错误信息[ERROR][MY-012869][InnoDB]Recordinindex`log_time`oftable`lts`.`lts_job_log_po`wasnotfoundonupdate:TUPLE(info_bits=0,2n_cmp=2,fields)2023-05-29T23:03:05.146242Z193[ERROR][MY-013183][InnoDB]Assertionfailure:row0upd.cc:......
  • Mysql DDL执行方式-pt-osc介绍 | 京东云技术团队
    1引言大家好,接着上次和大家一起学习了《MySQLDDL执行方式-OnlineDDL介绍》,那么今天接着和大家一起学习另一种MySQLDDL执行方式之pt-soc。在MySQL使用过程中,根据业务的需求对表结构进行变更是个普遍的运维操作,这些称为DDL操作。常见的DDL操作有在表上增加新列或给某个列添加......
  • Mysql:数据库优化步骤
    数据库优化步骤查看mysql是否存在周期性波动1.1是。代表可能遇上如618,双十一等活动对数据库暂时性的压力增大,可以mysql加缓存或更改缓存策略1.2不是。大概率是本身开发人员编写的SQL有问题,或者是业务量达到一定程度引发的查询慢非周期性波动调优思路开启慢查询,并设定慢......
  • MySQL数据库A表和B表id冲突解决办法?
    方法1:不要定义自增长,用触发器来实现。方法2:不要定义自增长,两张表共享同一个sequence。(规则唯一)方法3:自增长,但是一张表是奇数,另一张全是偶数基于触发器的方法三:(对于现有系统的补救方案),最好的方案还是方法二使用同一个自增sequence获取--修改A表id别和B表id重复--查询最大的......
  • springboot使用jdbc连接mysql(不用配置文件)
     1、连接mysql的工具类:packagecom.jzproject.common.mysql;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONArray;importorg.springframework.jdbc.core.JdbcTemplate;importjava.sql.*;importjava.util.ArrayList;importjava.util.HashMap;......
  • spingBoot连接mysql数据库
    1.最终效果 字符串+数据库中id为2的手机号 2.代码设置了响应的内容的格式  3mysql数据库内表内容数据库名称qikegu_demo ----------------------------------------------------------------------------------------------------------------------------------......
  • Mysql Php 推送获取随机数据解决分页重复问题
    或许你已经看过很多博主写的文章,要不就是抄袭,要不就是给你一个下面的语句,随机是随机了,但是多来两页,你会发现前面出现的数据在第三页甚至第二页就出现了select*fromtableorderbyrand()这是因为rand()机制的问题,他每次都会打乱数据给你,然后你去取的时候0-10,11-20都有可能......