面试中的老大难 - MySQL中的锁
目录
- 一、锁的分类:
- 1. 按照性能划分:
- 2. 按照操作类型划分:
- 3.按照数据粒度划分:
- 4.按照更细粒度划分:
- 二、死锁的产生预防:
- 1: 产生死锁的条件
一、锁的分类:
1. 按照性能划分:
1.1 悲观锁 : 在悲观锁机制下,读取数据库中的数据时需要加锁,此时不能对这些数据进行修改操作。修改操作时也需要加锁,此时不能对这些数据进行读操作。Mysql中的读锁和写锁都是悲观锁。
1.2 乐观锁: 乐观锁是通过在数据中增加一个version版本号来实现的,在是查询数据库时,会将版本号一起读取出来,当更新数据时,会将版本号加1,将提交的版本与对应的记录版本号进行对比,如果提交的数据版本号大于数据表中当前要修改的数据版本号则对数据进行修改操作,否则,不修改数据表中的数据。
2. 按照操作类型划分:
2.1 读锁: 读锁又称为共享锁或S锁,针对同一份数据,可以加多个读锁而互不影响。
2.2 写锁: 写锁又称为排他锁或X锁,如果当前锁未释放,它会阻塞其他的写锁或读锁。
3.按照数据粒度划分:
3.1 表锁: 就是在在整个数据表上对数据进行加锁和释放锁,典型的特点就是开销比较小,加锁速度快,一般不会出现思索,锁的粒度比较大,发生锁冲突的概率最高,并发度最低。
在MySQL中有两种表级锁模式,一种是表共享锁,另一种是表独占写锁。当一个线程获取到一个表的读锁后,其他线程仍然可以对表进行读操作,但是不能对表进行写操作。当一个线程获取到一个表的写锁后,只有持有锁的线程可以对表进行更新操作,其他线程对数据表的读写操作都会被阻塞,直到写锁释放为之。
3.2 行锁: 就是对在数据行上进行加锁和释放锁,典型特点就是开销比较大,加锁速度慢,可能会出现死锁,锁定的粒度最小,并发度最高。
提示:行锁主要加在索引上,如果对非索引字段进行更新,航所有可能会变成表锁
3.3. 页面锁: 就是在页面级对数据进行加锁和释放锁,对数据的加锁开销介于表锁和行锁之间,可能会出现死锁,锁的粒度介于表锁和行锁之间.并发度一般。
4.按照更细粒度划分:
4.1 间隙锁: 在MySQL中使用范围查询时,如果请求共享锁或排他锁,InnoDB会给符合条件的索引项加锁
例如: 我们执行以下命令:
update account set balance = balance + 100 where id > 5 and id < 16 ;
其他事务无法在(5,16)这个区间插入或修改操作。
4.2 临键锁: 就是行锁和间隙锁的组合,例如上面的例子在区间(5,16)就可以成为临键锁。
二、死锁的产生预防:
1: 产生死锁的条件
互斥条件不可剥夺条件 请求与保持条件循环等待条件
只有4个必要条件都满足,才会发生死锁。破坏其中任何一个条件都可以预防死锁,在工作中,我们经常用有序资源分配法和银行家算法来避免死锁。
面试中的老大难 - MySQL中的锁相关推荐
- 面试中的老大难-mysql事务和锁,一次性讲清楚!
转自:https://juejin.cn/post/6855129007336521741 众所周知,事务和锁是mysql中非常重要功能,同时也是面试的重点和难点.本文会详细介绍事务和锁的相关概念及其 ...
- jsp mysql 图片路径,请教JSP中怎么向MySql中存入和取出图片
当前位置:我的异常网» Java Web开发 » 请教JSP中怎么向MySql中存入和取出图片 请教JSP中怎么向MySql中存入和取出图片 www.myexceptions.net 网友分享于:2 ...
- setTimeStamp()与setDate()区别 如何将java中Date存入mysql中的datetime中,字符串怎么转换为日期类型
数据库 1.java.sql.Date 与 java.util.Date java.sql.Date是从java.util.Date中继承而来 假设 dates1(java.sql.Date)要赋值给 ...
- 面试官问:mysql中时间日期类型和字符串类型的选择
摘要:MySQL中有多种表示时间日期的数据类型,主要有YEAR.TIME.DATE.DATETIME.TIMESTAMP等 本文分享自华为云社区<一针见血,mysql中时间日期类型和字符串类型的 ...
- 为什么不用mysql版本号加锁_面试必问的Mysql事务和锁,你真的了解吗?
前言 本文内容 事务的定义和作用,隔离级别 MVCC 是什么,快照读和加锁读 锁分类,行锁,意向锁,怎么查看 Mysql 锁的信息 悲观锁和乐观锁的使用场景 Mysql 的版本为 8.0.17. 事务 ...
- mysql中change用法,mysql 中alter的用法以及一些步骤
mysql 中alter的用法以及一些方法 在用到alter的时间,查到了这个文章,就copy下来了,详细进入下面链接: MySQL之alter语句用法总结 1:删除列 ALTER TABLE [表名 ...
- mysql中如何删除表中int约束,MySQL中的约束,添加约束,删除约束,以及其他修饰
一.NOT NULL(非空约束) 添加非空约束 1)建表时直接添加 CREATE TABLE t_user(user_id INT(10) NOT NULL); 2)通过ALTER 语句 ALTER ...
- mysql中locat函数,MySQL中的LOCATE和POSITION函数使用方法 | 很文博客
不常用:MySQL中的LOCATE和POSITION函数 LOCATE(substr,str) POSITION(substr IN str) 返回子串 substr 在字符串 str 中第一次出现的 ...
- mysql中使用正则表达式,mysql中使用正则表达式查询
基本形式 属性名 regexp '匹配方式' 正则表达式的模式字符 ^ 匹配字符开始的部分 eg1: 从info表name字段中查询以L开头的记录 select * from info where n ...
最新文章
- 大型网站的灵魂——性能优化
- Linux中的top命令查看内存和cpu信息
- 小型云台用的是什么电机_盘一下目前国内主流的电动汽车都用什么电机
- 钉钉轻松顶住信息洪流的原因,竟然是它
- python软件设置代码字体的大小_PyCharm中代码字体大小调整方法
- 与孩子一起学编程python_《与孩子一起学编程》python自测题
- IOS第12天(3,UIViewController的生命周期)
- 使用剪切板[3]: SetComponent、GetComponent
- virtualbox谨记:续....
- HTTPS为什么更安全,先看这些 , 网络加密 , 加密解密
- 服装进销存软件排名前十名,最新门店进销存测评现已出排行榜
- sonyxz2刷机教程,日版au刷欧版
- cuteftp下载文件变成macintosh格式
- android 支付宝第三方支付
- linux程序图形关不了怎么办,ubuntu下卸载软件 linux关闭图形化界面
- 什么是接口?为什么要使用抓包工具?Fiddler实现截包与篡改、接口自动化测试
- phpStrom2016.3激活教程
- 教育类小程序APP开发
- MyBatis 源码分析系列文章导读 1
- theta悖论:4-8 Hz的EEG振荡既反映睡眠压力又体现认知控制
热门文章
- iptables 之-m -state
- HTML5模拟齿轮动画
- c语言access码大小写A转换,字母大小写互相转换 ASCII码转化符号问题
- 如何在数字前加上0,如将1变成01
- 最新精仿乐乐易支付网站模板源码
- java数据集导出excel_使用Apache Poi将结果集从Java数据库导出到Excel
- 吃透Chisel语言.33.Chisel进阶之硬件生成器(二)——Chisel组合逻辑电路生成:以BCD编码表为例
- C语言练习题之函数部分
- 第四次计算革命孕育“数字经济体”
- Penetration_Testing_POC-About 渗透测试有关的POC、EXP、脚本、提权、小工具等