Mysql进阶(锁)

一、锁概述

两个事务的写操作之间的互相影响。隔离性要求同一时刻只能有一个事务对数据进行写操作,InnoDB通过锁机制来保证这一点。

锁机制基本原理:

事务在修改数据之前,需要先获得相应的锁;获得锁之后,事务便可以修改数据;该事务操作期间,这部分数据是锁定的,其他事务如果需要修改数据,需要等待当前事务提交或回滚后释放锁。

按照锁粒度分:

1.表锁

表级锁,增删改操作时,会给整张表加锁。myisam支持表级锁,InnoDB支持表级锁,但是默认没有使用。

特点:虽然加锁的开销小,但是并发性能低。

2.间隙锁(Next-Key锁)

增删改操作时,会给满足某些条件,或者满足某个区间的行进行加锁。即使用范围条件,而不是相等条件检索。InnoDB会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但并不存在的记录称为间隙,InnoDB也会对这个“间隙”加锁。

3.行锁

Mysql中锁粒度最细的一种锁,表示只针对当前操作进行加锁。即一个事务对某行数据进行操作时,其他事务不能对本行进行操作。行级锁能大大减少数据库操作的冲突,其加锁粒度最小,但是加锁的开销最大。行级锁分为共享锁和排他锁

特点:

开销大,加锁慢;锁的粒度最小,发生锁冲突的概率最低;并发性能高。

注:表锁、间隙锁和行锁都是排它锁。增删改自带锁。

共享锁和排他锁针对查操作。可以为查询语句添加共享锁和排他锁。

共享锁:

又称读锁,为一个查询语句添加共享锁后,其他事务可以读取,但是不能再添加排他锁。(这里的排他锁指的是增删改操作)。

select … lock in share mode

上面的例子中可以看出,在右侧的事务中为id=5的数据添加共享锁后,左侧事务可以查询到id=5的记录,但是不能修改id=5的数据(排他锁)。

排他锁:

为一个查询语句添加排他锁后,其他事务就不能为加锁的数据添加其他锁了。共享锁也是不可以。update,delete,insert语句都会自动给涉及到的数据加上排他锁,select语句默认不会加任何锁类型。

select …for update

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【element-ui】el-select下拉框el-date-picker弹出框定位问题解决方案

问题描述: 项目开发过程中发现el-select和el-date-picker弹出框显示时候,滚动屏幕,导致弹出框定位出现问题。 首先考虑到看一下element-ui官网提供的api,如下图 1、select提供了popper-append-to-body属性的配置 代码如下&#x…

信钰证券:股票布林线是什么意思?

布林线又名boll线,它是股票技术剖析中一种常用的目标,由上轨、中轨、下轨三条线构成一个带状区间。 布林线是约翰布林发明的,以股票的规范差为基准,求得股票的价格信赖区间,以此来预测股票价格的走势。 一般以20日移动…

【C++】C++的简要介绍

简单不先于复杂,而是在复杂之后。 文章目录 1. 什么是C2. C的发展史3. C的重要性3.1 语言的使用广泛度3.2 在工作领域3.3 在校招领域3.3.1 岗位需求3.3.2 笔试题 3.3.3 面试题 4. 如何学习C4.1 别人怎么学? 1. 什么是C C语言是结构化和模块化的语言&…

正点原子--STM32基本定时器学习笔记(1)

目录 1. 定时器概述 1.1 软件定时原理 1.2 定时器定时原理 1.3 定时器分类 1.4 定时器特性表 1.5 基本、通用、高级定时器的功能整体区别 2. 基本定时器简介 3. 基本定时器框图 时钟树分析 这部分是笔者对基本定时器的理论知识进行学习与总结!主要记录学习…

品牌如何营造生活感氛围?媒介盒子分享

「生活感」简而言之是指人们对生活的感受和意义,它往往没有充斥在各种重要的场合和事件中,而是更隐藏在细碎平凡的生活场景中。在营销越来越同质化的当下,品牌应该如何打破常规模式,洞察消费情绪,找到更能打动消费者心…

python coding with ChatGPT 打卡第17天| 二叉树:找树左下角的值、路径总和

相关推荐 python coding with ChatGPT 打卡第12天| 二叉树:理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 python coding with ChatGPT 打卡第15天| 二叉树:翻转…

LeetCode-第171题-Excel表的序列号

1.题目描述 给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 例如: A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ... 2.样例描述 3.思路描述 遍历时将每个字母与 A 做减法&…

小白代码审计入门

最近小白一直在学习代码审计,对于我这个没有代码审计的菜鸟来说确实是一件无比艰难的事情。但是着恰恰应了一句老话:万事开头难。但是小白我会坚持下去。何况现在已经喜欢上了代码审计,下面呢小白就说一下appcms后台模板Getshell以及读取任意文件,影响的版本是2.0.101版本。…

Go语言安全编码:crypto/sha1库全面解析

Go语言安全编码:crypto/sha1库全面解析 简介SHA-1基础原理和特点SHA-1与其他哈希算法的比较代码示例:基本的SHA-1哈希生成 使用crypto/sha1处理数据处理字符串和文件的SHA-1哈希代码示例:为文件生成SHA-1哈希 常见错误和最佳实践 在实际项目中…

C# Winform DataGridView 控件和 DataTable

目录 一、概述 二、DataTable 的用法 1.创建表和列 2.添加行 3.取值和赋值 4.删除行 5.遍历 DataTable 6.判断 DataTable 列中是否存在某个值 7.设置主键 8.获取 DataRow 所在的行号 9.DataTable 转换为 List 10.将 List 转 DataTable 三、DataGridView 的用法 1…

SpringBoo+Vue构建简洁日志文件查看系统

点击下载《SpringBooVue构建日志文件查看系统(源代码)》 1. 前言 想必经常做java开发的小伙伴,其大多数服务都是运行在linux系统上的,当遇到一些比较棘手的bug需要处理时,经常要上服务器去捞日志,然后通过…

跟着小德学C++之启动监听

嗨,大家好,我是出生在达纳苏斯的一名德鲁伊,我是要立志成为海贼王,啊不,是立志成为科学家的德鲁伊。最近,我发现我们所处的世界是一个虚拟的世界,并由此开始,我展开了对我们这个世界…