mysql 的 InnoDB引擎支持行锁,与Oracle不同,mysql的行锁是通过索引加载的,即是行锁是加在索引响应的行上的,要是对应的SQL语句没有走索引,则会全表扫描。

表锁:不会出现死锁,发生锁冲突几率高,并发低。
行锁:会出现死锁,发生锁冲突几率低,并发高。
锁冲突:例如说事务A将某几行上锁后,事务B又对其上锁,锁不能共存否则会出现锁冲突。(但是共享锁可以共存,共享锁和排它锁不能共存,排它锁和排它锁也不可以)。
死锁:例如说两个事务,事务A锁住了1-5行,同时事务B锁住了6-10行,此时事务A请求锁住6-10行,就会阻塞直到事务B施放6-10行的锁,而随后事务B又请求锁住1-5行,事务B也阻塞直到事务A释放1~5行的锁。死锁发生时,会产生Deadlock错误。

锁是对表操作的,所以自然锁住全表的表锁就不会出现死锁。

共享锁:读锁。当一个事务对某几行上读锁时,允许其他事务对这几行进行读操作,但不允许其进行写操作,也不允许其他事务给这几行上写锁。(读写锁不能共存,读的时候不能让其它事务进行写操作,更不能上写锁,如果其其它事务对同一行上读锁的话会造成该事务的阻塞)。
排它锁又称:写锁。当一个事务对某几行上写锁时,不允许其他事务写,但允许读(如果读也就是查,不上读锁可能是脏读,上读锁之后等待对应事务提交或者回滚后方可读到实时数据)。更不允许其他事务给这几行上任何锁(读锁会阻塞)。包括写锁。
上共享锁的写法:lock in share mode(读)例如: select  math from zje where math>60 lock in share mode;
上排它锁的写法:for update(写)              例如:select math from zje where math >60 for update;
注意几点:
1、行锁必须有索引才能实现,否则会自动锁全表,那么就不是行锁了。
2、两个事务不能锁同一个索引(不能有锁住有交集的行)
例如:
事务A先执行:select math from zje where math>60 for update;事务B再执行:select math from zje where math<60 for update;
这样的话,事务B是会阻塞的。如果事务B把 math索引换成其他索引就不会阻塞,但注意,换成其他索引锁住的行不能和math索引锁住的行有重复
3、insert ,delete , update在事务中都会自动默认加上排它锁(写)。
会话1:select  math  from zje where math>60 for update;
会话2:update zje set math=99 where math=68;阻塞...........
如上,会话1先把zje表中math>60的行上排它锁。然后会话2试图把math=68的行进行修改,math=68处于math>60中,所以是已经被锁的,会话2进行操作时,就会阻塞,等待会话1把锁释放。当commit时或者程序结束时,会释放锁。

MySql中的行锁和表锁的理解相关推荐

  1. Mysql中的读写锁,表锁和行锁,间隙锁

    Mysql数据库锁 锁是计算机协调多个进程或线程并发访问某一资源的机制. 在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的 ...

  2. MySQL/InnoDB中,乐观锁、悲观锁、共享锁、排它锁、行锁、表锁、死锁概念的理解

    MySQL/InnoDB的加锁,一直是一个面试中常问的话题.例如,数据库如果有高并发请求,如何保证数据完整性?产生死锁问题如何排查并解决?我在工作过程中,也会经常用到,乐观锁,排它锁,等.于是今天就对 ...

  3. MySQL中的锁(表锁、行锁)

    锁是计算机协调多个进程或纯线程并发访问某一资源的机制.在数据库中,除传统的计算资源(CPU.RAM.I/O)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所在有数 ...

  4. mysql某个表被行锁了_MySQL中的锁(表锁、行锁)

    锁是计算机协调多个进程或纯线程并发访问某一资源的机制.在数据库中,除传统的计算资源(CPU.RAM.I/O)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所在有数 ...

  5. MySQL中的行级锁,表级锁,页级锁

    数据库锁是数据库系统中非常重要的一个概念,本文将深入分析数据库中的锁相关知识,您可点击下方音频收听或直接查看文稿中的文字. 在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并 ...

  6. Mysql中的行级锁、表级锁、页级锁

    转载自 Mysql中的行级锁.表级锁.页级锁 在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足. 在数据库的锁机制中介绍过,在DBMS中,可以按 ...

  7. mysql 并发 锁表_MySQL中的锁(表锁、行锁) 并发控制锁

    https://github.com/MrLining/mysql/wiki/MySQL%E4%B8%AD%E7%9A%84%E9%94%81%EF%BC%88%E8%A1%A8%E9%94%81%E ...

  8. MySQL/InnoDB中,乐观锁、悲观锁、共享锁、排它锁、行锁、表锁、死锁概念的理解...

    2019独角兽企业重金招聘Python工程师标准>>> MySQL/InnoDB的加锁,一直是一个面试中常问的话题.例如,数据库如果有高并发请求,如何保证数据完整性?产生死锁问题如何 ...

  9. h5棋牌源码中MySQL中的锁(表锁、行锁)

    锁是计算机协调多个进程或纯线程并发访问某一资源的机制.在数据库中,除传统的计算资源(CPU.RAM.I/O)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所在有数 ...

  10. mysql中的锁(表锁,行锁)

    MySQL锁 开销.加锁速度.死锁.粒度.并发性能 --表锁:开销小,加锁快,不会出现死锁,锁定粒度大,发生锁冲突概率高,并发度低 --行锁:开销大,加锁慢,会出现死锁,锁定粒度小,发生锁冲突概率低, ...

最新文章

  1. xdg-open 打开“irc:*”链接
  2. redirect_uri参数错误解决方法
  3. java 实例化 bean,Spring(02)——bean实例化
  4. 蓝桥杯-9-2 文本加密
  5. dbm和mysql使用场景_mysql基本用法总结
  6. imagej之Python脚本
  7. 阿里云业绩同比增126% 云服务现“3A鼎立”
  8. jquery实现上下左右键盘监听_基于 jQuery 实现键盘事件监听控件
  9. java redis 原子操作_redis快速入门
  10. 【十次方】十次方项目介绍
  11. 计算机系统结构试卷及答案
  12. 一套基于java的开源车牌识别算法
  13. js,vue 上传图片前压缩图片(无损压缩,保持在2M以内)
  14. matlab保存f黑白图片_MATLAB的矩阵运算与重构
  15. 【已成功安装但无法使用】Python 3.10.2 安装pyodbc
  16. 管家婆财贸双全存货核算类型对应会计科目禁止删除
  17. 姿态估计1-02:FSA-Net(头部姿态估算)-源码训练测试-报错解决
  18. Ubuntu无法解析域名
  19. 4位先行进位加法器的vhdl程序_VHDL精密,Verilog简洁,但要写好都要遵守这25条通则...
  20. Matplotlib填图

热门文章

  1. [7 kyu] Exes and Ohs
  2. AR涂涂乐⭐一、unity高版本ImageTarget识别图开始是空白的解决办法、UI自适度
  3. 人工智能学习笔记:基本遗传算法及其改进算法
  4. C/C++宽字符与控制台程序
  5. 2019牛客暑期多校训练营(第四场)----E- triples II
  6. Kubernetes Pod报错 filed to get sandbox image “k8s.gcr.io/pause:3.6“
  7. 普通最小二乘法的推导证明
  8. SylixOS操作系统自学经历(一)
  9. 深入理解JAVA中的跨包继承
  10. 《当程序员的那些狗日日子》一