mysql select是否会锁表 ?

2024-05-04 05:38

本文主要是介绍mysql select是否会锁表 ?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文地址:http://www.bcty365.com/content-35-656-1.html
有的人说mysql的 select 会锁表 ,有的人说 mysql 的查询不会锁表 。
其他他们都对,没有 ,但是很片面。
其实对于mysql的select 是否会锁表 ,这个完全取决于表采用的是什么存储引擎。
这里我就拿大家最熟悉的存储引擎INNODB 和MYISAM 来说明这个问题。
对于myisam的表select 是会锁定表的 ,会导致其他操作挂起,处于等待状态。
对于innodb的表select 是不会锁表的。其实这里使用到了快照。快照这里不作讨论。

下面是是我的佐证:

回话一:
select SQL_NO_CACHE * from tmp002
表 tmp002 有5618288 数据 存储引擎时INNODB ,全部查询出来大约需要5min左右

回话二:
update tmp002
set num=6
where MreasonId in (‘700098’,’301001’ ) limit 10000

我们首先 执行以下 回话一的 语句 。 再执行回话二。

我们会发现回话2很快就执行了
update tmp002
set num=6
where MreasonId in (‘700098’,’301001’ ) limit 10000

受影响的行: 0
时间: 0.120s

在回话三种执行下 show full PROCESSLIST 。
没有发现任何锁定的现象。

修改表存储引擎:
alter table tmp002 ENGINE=MYISAM
受影响的行: 5618288
时间: 17.510s

同样是上面的例子

回话一:
select SQL_NO_CACHE * from tmp002
表 tmp002 有5618288 数据 存储引擎时INNODB ,全部查询出来大约需要5min左右
回话二:
update tmp002
set num=6
where MreasonId in (‘700098’,’301001’ ) limit 10000
我们首先 执行以下 回话一的 语句 。 再执行回话二。
我们先回话一直处于执行状态 ,没有返回任何信息 。
在回话三种执行下 show full PROCESSLIST 。
13564441 root 192.168.53.41:53312 tempDB Query 2 Locked update tmp002 set num=6 where MreasonId in (‘700098’,’301001’ ) limit 10000
13564671 root 192.168.53.41:53736 tempDB Query 4 Writing to net select SQL_NO_CACHE * from tmp002
回话13564441状态为 Locked ,等待锁的释放 。
综上所述,可以得到下面的结果。
对于myisam的表select 是会锁定表的 ,会导致其他操作挂起,处于等待状态。
对于innodb的表select 是不会锁表的。其实这里使用到了快照。快照这里不作讨论。
原文地址:http://www.bcty365.com/content-35-656-1.html

这篇关于mysql select是否会锁表 ?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/958435

相关文章

IDEA +maven git tomcat database数据库 调试 插件 log4j Spring junit

前言 idea优化配置、常规配置、配置maven、git、tomcat、database数据库、调试配置、插件配置、log4j配置、Spring配置等等,稍后一一更新! 优化配置(#item1 “item1”) 打开文件 :“idea – > bin – >idea64.exe.vmoptions” -Xms: 初始内存;-Xmx : 最大内存;-ReservedCodeCache

SQL的插入语句insert

插入数据分为以下几种方式: 1. 插入完整的行; 2. 插入行的一部分 3. 插入某些查询的结果 4. 从一个表复制到另一个表 1. 插入完整的行,有两种方式:    INSERT  INTO  Customers  VALUES ();                                   // 缺点:高度依赖表中列的定义次序,不能保证各列在下一次表

SQL中的limit

1.  select  prod_name  from  products  limit  5;    指示Mysql等DBMS返回不超过5行的数据 2.  select  prod_name  from  products  limit  5  offset  5;指示 Mysql等DBMS返回从第5行起的5行数据。  第一个数字是 检索的行数,第二个数字是指从哪里开始。 3.

iOS逆向 查看ipa包是否加密

从appstore上下载的ipa包,都是经过苹果公司加了密的,我们做逆行开发首先就需要把ipa加密的壳给砸掉,砸壳之后我们如何查看是否砸壳成功呢? 微信砸壳之后的文件为:WeChat.decrypted 打开终端,进入到WeChat.decrypted所在的目录,然后输入命令行: otool -l WeChat.decrypted | grep crypt cryptid 1代表加密,

dpkg: status database area is locked by another process 解决方法

解决办法:sudo rm -rf /var/lib/dpkg/lock 或者:rm -rf /var/lib/dpkg/lock

SpringBoot 学习四:macOS安装MySQL 以及报错解决

从MySQL官网下载Mysql,在本地安装好之后,用数据库连接工具Sequl Pro去连接数据库,发现报错了,报错信息有两种: Error1:Unable to connect to host 127.0.0.1 because access was denied.Double-check your username and password and ensure that access fro

Centos Mysql定时自动备份

一、备份准备&备份测试 1、备份目录准备 #mysql专用目录mkdir /mysql#mysql备份目录mkdir /mysql/backup#mysql备份脚本mkdir /mysql/backup/scripts#mysql备份文件mkdir /mysql/backup/files#mysql备份日志mkdir /mysql/backup/logs 2、备份脚本准备

Mysqldump 备份mysql数据库

1、mysqldump 安装 yum -y install mysql-client    / apt-get install mysql-client 2、使用mysqldump导出固定条件的数据库 (1)导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql (

docker之mysql连接 Authentication plugin ‘caching_sha2_password‘ cannot be loaded

1  1.docker exec -it mysql01(镜像别名) bash  3 // 进入mysql命令行  4   5  2.mysql -uroot -p 密码       6   7   // 修改加密规则 设置新密码  8   9  3.ALTER USER '账号'@'用户域' IDENTIFIED WITH mysql_native_password BY '新密码';   10