MySQL---锁机制

news2024/11/26 0:34:26

1. 锁的分类

从对数据操作的粒度分 :

表锁:操作时,会锁定整个表。

行锁:操作时,会锁定当前操作行。

从对数据操作的类型分:

读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响。

写锁(排它锁):当前操作没有完成之前,它会阻断其他写锁和读锁。

MySQL锁的特性 :

仅从锁的角度来说:表级锁更适合于以查询为主,只有少量按索引条件更新数据的应用,如Web

应用;而行级锁则更适合于有大量按索引条件并发更新少量不同数据,同时又有并发查询的应用,

如一些在线事务处理(OLTP)系统。

2. MyISAM表锁

MyISAM 在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作

(UPDATE、DELETE、INSERT 等)前,会自动给涉及的表加写锁,这个过程并不需要用户干

预,因此,用户一般不需要直接用 LOCK TABLE 命令给 MyISAM 表显式加锁。

--加读锁 :
lock table table_name read; 

--加写锁 : 
lock table table_name write;

MyISAM表锁的特点:

对MyISAM 表的读操作,不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写请求;

对MyISAM 表的写操作,则会阻塞其他用户对同一表的读和写操作;

简而言之,就是读锁会阻塞写,但是不会阻塞读。而写锁,则既会阻塞读,又会阻塞写。

此外,MyISAM 的读写锁调度是写优先,这也是MyISAM不适合做写为主的表的存储引擎的原因。

因为写锁后,其他线程不能做任何操作,大量的更新会使查询很难得到锁,从而造成永远阻塞。

 
-- MySQL的锁机制
drop database if exists  mydb14_lock;
create database mydb14_lock ;
 
use mydb14_lock;
  
create table `tb_book` (
  `id` int(11) auto_increment,
  `name` varchar(50) default null,
  `publish_time` date default null,
  `status` char(1) default null,
  primary key (`id`)
) engine=myisam default charset=utf8 ;
 
insert into tb_book (id, name, publish_time, status) values(null,'java编程思想','2088-08-01','1');
insert into tb_book (id, name, publish_time, status) values(null,'solr编程思想','2088-08-08','0');
 
create table `tb_user` (
  `id` int(11) auto_increment,
  `name` varchar(50) default null,
  primary key (`id`)
) engine=myisam default charset=utf8 ;
 
insert into tb_user (id, name) values(null,'令狐冲');
insert into tb_user (id, name) values(null,'田伯光');

3. InnoDB行锁

行锁特点 :偏向InnoDB 存储引擎,开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的

概率最低了,并发度也最高。

InnoDB MyISAM 的最大不同有两点:一是支持事务;二是采用了行级锁。

InnoDB  实现了以下两种类型的行锁。

共享锁(S):又称为读锁,简称S锁,共享锁就是多个事务对于同一数据可以共享一把锁,都能

访问到数据,但是只能读不能修改。

排他锁(X):又称为写锁,简称X锁,排他锁就是不能与其他锁并存,如一个事务获取了一个数

据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事

务可以对数据就行读取和修改。

对于UPDATE、DELETE和INSERT语句,InnoDB会自动给涉及数据集加排他锁(X);

对于普通SELECT语句,InnoDB不会加任何锁;

--共享锁(S):
SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE 
--排他锁(X) :
SELECT * FROM table_name WHERE ... FOR UPDATE
-- 行锁 
drop table if exists test_innodb_lock;
create table test_innodb_lock(
    id int(11),
    name varchar(16),
    sex varchar(1)
)engine = innodb ;
 
insert into test_innodb_lock values(1,'100','1');
insert into test_innodb_lock values(3,'3','1');
insert into test_innodb_lock values(4,'400','0');
insert into test_innodb_lock values(5,'500','1');
insert into test_innodb_lock values(6,'600','0');
insert into test_innodb_lock values(7,'700','0');
insert into test_innodb_lock values(8,'800','1');
insert into test_innodb_lock values(9,'900','1');
insert into test_innodb_lock values(1,'200','0');
 
create index idx_test_innodb_lock_id on test_innodb_lock(id);
create index idx_test_innodb_lock_name on test_innodb_lock(name);
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/559440.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT与低代码开发:危机四伏、技术暴走!

随着人工智能技术和低代码开发平台的不断发展,越来越多的企业开始采用AI技术来提高业务效率和创造更好的用户体验。AI技术与低代码开发的结合,为企业节省了大量时间和成本,同时也提高了业务创新和竞争力。然而,一些潜在的问题也开…

关于怎么用好API接口获取更多信息节约时间成本

API接口是现代互联网应用开发的重要工具,它允许开发者使用标准化的方式获取数据和服务,在搭建应用中扮演了重要的角色。因此,如何利用API接口获取更多信息已经成为了每个开发者需要掌握的技能之一。 第一步:寻找 API接口 在开始…

2023Revit精装模块,一键搞定便捷精装!

大家好,这里是BIM建模助手。 今天有个重磅消息要告诉大家,那就是BIM建模助手的【精装模块】上线啦! 为了辅助BIMer快速设计出精装修的房屋效果,我们开发了【精装模块】,无论是装饰面层、铺排瓷砖、布置吊顶、统计出量…

​​​​​​​博物馆文物馆藏环境空气质量无线监控系统方案

博物馆文物馆藏环境空气质量无线监控系统方案 博物馆无线环境测控系统 博物馆恒温恒湿消毒净化系统 现代化博物馆空气质量一体化3D可视化管控平台 博物馆温湿度在线监控系统 博物馆光照在线监控系统 博物馆二氧化碳在线监控系统 博物馆在线监控系统 博物馆紫外线在线监控…

【TikZ 简单学习(下):基础绘制】Latex下的绘图宏包

【TikZ 简单学习[下]:基础绘制】Latex下的绘图宏包 上文绘制多个节点给节点添加统一样式给节点命名使用相对位置绘制给节点标签链接边的绘制在线边上添加标签绘制蛇形线和多行文本层图绘制一个简单的树 上文 【TikZ 简单学习(上):基础绘制】Latex下的绘…

【笔试强训选择题】Day19.习题(错题)解析

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:笔试强训选择题 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!&#xff…

深度学习神经网络学习笔记-多模态方向-11-Deep Voice: Real-time Neural Text-to-Speech

摘要 本文提出Deep Voice,一种完全由深度神经网络构建的生产质量文本到语音系统。Deep Voice为真正的端到端神经语音合成奠定了基础。该系统由五个主要的构建模块组成:用于定位音素边界的分割模型、字素到音素的转换模型、音素时长预测模型、基频预测模型和音频合成…

那年我手执『wait』桃木剑,轻松解决僵尸进程~

文章目录 💐专栏导读💐文章导读🐧进程退出🐦进程常见的退出方法🐔正常终止🔔return 退出🔔exit 退出🔔_exit 退出 🐔异常终止 🐧进程等待🐦必要性…

00后实在太卷了,跳槽到我们公司起薪20k,都快超过我了....

都说00后已经躺平了,但是有一说一,该卷的还是卷。 前段时间我们部门就来了个00后,工作都还没两年,跳到我们公司起薪20K,都快接近我了。 后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了。最近和…

美股股指期货是什么?有哪些美股股指期货交易门槛?

美股期指就是美股期货指数,并不是单独的指道琼斯还是纳斯达克,就好像中国的股指期货一样道理,是以沪深300为标的的,美股期指也是期货,不是单纯的指数。交易美股产品需要先完成开户,要想一次性开户成功就要满…

2023.4月及5月最新HCIP 考试战报来袭

2023年HCIP/CCNP考试战报_微思xmws的博客-CSDN博客国内企业或国企、事业单位,华为设备普及,国内未来发展趋势,考华为认证更被认可。如果你在外企上班或有出国打算,推荐考思科。https://blog.csdn.net/XMWS_IT/article/details/129…

【隔空投送】2023新品,加速科技ST2500E重磅来袭

随着5G通信、人工智能、虚拟现实、新能源以及先进封装技术的飞速发展,芯片线宽尺寸不断减小,芯片复杂度不断跃升,对测试机的要求愈加提高。提供多种测试程序并可进行大量的并行测试,有效减少测试成本,缩短产品上市时间…

Paddle 模型转 TensorRT加速模型

Paddle 模型转 TensorRT加速模型 概述 NVIDIA TensorRT 是一个高性能的深度学习预测库,可为深度学习推理应用程序提供低延迟和高吞吐量。PaddlePaddle 采用子图的形式对TensorRT进行了集成,即我们可以使用该模块来提升Paddle模型的预测性能。在这篇文章…

Ubuntu显示时间不正确的问题解决

安装完ubuntu后,发现我的ubuntu显示的时间不对,和网络的时间根本对不上。网上查找了相关设置方法,这里总结一下。 一般来说,显示时间不正确的情况就两种情况,第一:是你系统设置的时区不对;第二…

多层感知机学习XOR实例

多层感知机学习XOR实例 多层感知机介绍使用多层感知机学习XOR实例传统统计数学方法(传统机器学习)使用多层感知机学习XOR 总结 多层感知机介绍 多层感知机(Multilayer Perceptron,MLP),又称为深度前馈网络…

Compose 二三事:绘制原理

setContent做了什么 我们基于一个最简单的例子进行分析 class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {Text(text "Hello World!")}} }这里setContent做了什么…

【Jmeter入门】使用Jmeter做接口测试

目录 一、Jmeter简介 二、Jmeter相关插件安装: 三、Jmeter运行模式及参数 四、Jmeter函数 五、Jmeter属性与变量 六、Jmeter如何做接口测试 【1】、Jmeter 的使用步骤 【2】、接口请求实例 1. “用户定义的变量” 的应用 3. 建立接口间的关联 4…

Gaussian量子化学计算、LAMMPS分子动力学模拟

Gaussian是做半经验计算和从头计算使用最广泛的量子化学软件,可研究诸如分子轨道,结构优化,过渡态搜索,热力学性质,偶极矩和多极矩,电子密度和电势,极化率和超极化率,红外和拉曼光谱…

超越竞争的获客之道:DTC品牌出海策略全面解析

随着全球数字化的快速发展,DTC品牌正迎来一个全新的时代。然而,随着越来越多的DTC品牌进入国际市场,如何在激烈的竞争中脱颖而出,并获得新客户成为一个关键的挑战。本文Nox聚星将和大家深入探讨DTC品牌在出海时代如何破解获客困局…

外包干了五年,废了...

先说一下自己的情况。大专生,17年通过校招进入湖南某软件公司,干了接近5年的测试点点点,今年年上旬,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了五年的点工…