MySQL数据库中的锁还是非常重要的,本文重点给大家详细的来介绍下MySQL数据中的各种锁。

一、表锁和行锁

1.表锁

表锁的优势:开销小;加锁快;无死锁
表锁的劣势:锁粒度大,发生锁冲突的概率高,并发处理能力低
加锁的方式:自动加锁。查询操作(SELECT),会自动给涉及的所有表加读锁,更新操作(UPDATE、DELETE、INSERT),会自动给涉及的表加写锁。也可以显示加锁:
共享读锁:lock table tableName read;
独占写锁:lock table tableName write;
批量解锁:unlock tables;

2.行锁

行锁的劣势:开销大;加锁慢;会出现死锁
行锁的优势:锁的粒度小,发生锁冲突的概率低;处理并发的能力强
加锁的方式:自动加锁。对于UPDATE、DELETE和INSERT语句,InnoDB会自动给涉及数据集加排他锁;对于普通SELECT语句,InnoDB不会加任何锁;当然我们也可以显示的加锁:
共享锁:select * from tableName where … + lock in share more
排他锁:select * from tableName where … + for update
InnoDB和MyISAM的最大不同点有两个:

  1. InnoDB支持事务(transaction);
  2. 默认采用行级锁。加锁可以保证事务的一致性。

3.表锁和行锁对比

  • 锁定粒度:表锁 > 行锁
  • 加锁效率:表锁 > 行锁
  • 冲突概率:表锁 > 行锁
  • 并发性能:表锁 < 行锁

二、锁的细分

锁名 锁级别 英文名称
共享锁 行锁 Shared Locks
排它锁 行锁 Exclusive Locks
意向共享锁 表锁 Intention Shared Locks
意向排它锁 表锁 Intention Exclusive Locks

1.共享锁

  又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一个数据可以共享一把锁,都能访问到数据,但是只能读不能修改;

select * from table where id = 1 Lock IN SHARE MODE;

2.排他锁

  又称为写锁,简称为X锁,排它锁不能与其他锁并存,如果一个事务获取了一个数据行的排它锁,其他事务就不能再获取该锁,只有该获取了排它锁的事务是可以对数据行进行读取和修改。
加锁方式:

自动:delete / update / insert 默认加上X锁
手动:select * from table for update

3.意向锁

  意向锁是由数据引擎自己维护的,用户无法手动操作意向锁.

意向共享锁(Intention Shared Lock,简称IS锁)。表示事务准备给数据行加入共享锁,也就是一个数据行加共享锁前必须先取得该表的IS锁
意向排它锁(Intention Exclusive Lock,简称IX锁)表示事务准备给数据行加入排它锁,说明事务在一个数据行加排它锁前必须先获得该表的IX锁。

为什么需要表级别的意向锁?
  假设没有意向锁,我们加表锁的时候,需要去扫描全表是否有存在锁,数据量过大的时候,会导致加锁效率很低。但是如果我们在加锁的时候,数据库给我们自动加上意向锁,标记当前表,某个地方已经有了锁,那么我们就可以以很低的消耗,来完成是否加锁这个动作.

三、扩展问题

1.和Java中的锁区别

  这两个种类的锁的作用都是一样的,都是为了解决资源并发的情况下,对资源的写问题的控制。简单来说就是解决并发。

2.MySQL中锁的本质

  在MySQL数据库中,锁的本质就是对索引打上标记,如果当前表没有索引,则直接找到sequence/rownum这样的默认表序列,完成锁表。

好了~本文就介绍到这里,希望对你有所帮助哦!

MySQL中的表锁行锁共享锁很难吗?看了本文就清楚了哦相关推荐

  1. mysql进阶: mysql中的锁(全局锁/表锁/行锁/间隙锁/临键锁/共享锁/排他锁)

    锁在生活中处处可见,门锁,手机锁等等. 锁存在的意义是保护自己的东西不被别人偷走/修改. 在mysql中锁的意义也是一样,是为了保护自己的数据不被别人进行修改,从而导致出现脏读,幻读等问题.在学习锁的 ...

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

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

  3. mysql某个表被行锁了_MySQL 行锁和表锁的含义及区别详解

    一.前言 对于行锁和表锁的含义区别,在面试中应该是高频出现的,我们应该对MySQL中的锁有一个系统的认识,更详细的需要自行查阅资料,本篇为概括性的总结回答. MySQL常用引擎有MyISAM和Inno ...

  4. mysql 表锁 MDL锁 行锁

    mysql 按照粒度分可以分为 全局锁 表锁 行锁 全局锁 给整个锁加上锁 Flush tables with read lock 让数据处于只读的状态 一般用户 场景:做全库的逻辑备份. 表锁 顾名 ...

  5. 表锁,行锁,排他锁,共享锁,悲观锁和乐观锁

    行锁: mysql,innodb,使用的是行锁.每次插入/更新时会自动加锁. mysql的行锁是基于索引加载的 行锁的特征:锁冲突概率低,并发性高,但是会有死锁的情况出现. 表锁: myisam,使用 ...

  6. mysql怎么加全局锁_MySQL锁机制/管理(并发锁,行锁,表锁,预加锁,全局锁等等)

    MySQL实验室 1.?MySQL 中并发和隔离控制机制 Meta-data元数据锁:在table cache缓存里实现的,为DDL(Data Definition Language)提供隔离操作.一 ...

  7. mysql临键锁_详解 MySql InnoDB 中的三种行锁(记录锁、间隙锁与临键锁)

    详解 MySql InnoDB 中的三种行锁(记录锁.间隙锁与临键锁) 前言 InnoDB 通过 MVCC 和 NEXT-KEY Locks,解决了在可重复读的事务隔离级别下出现幻读的问题.MVCC  ...

  8. 周末杂谈:在MYSQL中,添加数据行后,使用右外连接查询所有课程的选修情况,要求列出课程编号、课程名称、选修人数,表中没有的课程列值为空的解决方法

    周末杂谈:在MYSQL中,添加数据行后,使用右外连接查询所有课程的选修情况,要求列出课程编号.课程名称.选修人数,表中没有的课程列值为空的解决方法 实验前期准备 course表(课程表) 在其中: c ...

  9. mysql 如何删除重复的行_如何从mysql中的表中删除重复的行

    我需要从 mysql中删除表中的重复记录. 所以我有一个表名"employee"字段是empid,empname,empssn 为了获得重复记录我写了一个查询 SELECT COU ...

最新文章

  1. 2010提高组-乌龟棋 [记忆优化搜索]
  2. DIY穷人版谷歌眼镜,自定义手势操控,树莓派再一次被开发新玩法
  3. MySQL源码编译与初始化
  4. WORD如何对标题批量地应用样式?
  5. python从键盘获取数学表达式字符串_python – 数学表达式中String类型的字符串操作...
  6. 转载:Charles 使用过程中遇到问题
  7. 电脑闪光代码_清华姚班毕业生开发新特效编程语言,99行代码实现冰雪奇缘,网友:大神厉害了!创世的快乐...
  8. 【Win10桌面美化】一个精致的程序员桌面是怎样的呢(花了一上午时间两种风格!)
  9. Java 产品与软件下载
  10. 在windows 2003系统上安装诺基亚pc套件以及笔记本通过PC套件上网
  11. NetSarang旗下网络通讯系列产品v5版本更新合集丨附下载
  12. 跳妹儿学编程之ScratchJr(三):什么是儿童编程语言?初识ScratchJr和Scratch
  13. [转载]Oraclenbsp;grantnbsp;revokenbsp;…
  14. Ubuntu磁盘扩容(简单亲测有效)
  15. USACO section2.4 Cow Tours题解代码
  16. Linux常用命令cp详解
  17. html5中分镜图文脚本,抖音分镜脚本这样做 轻松打造100w+粉丝大号
  18. HDU 1864 最大报销额 dp
  19. EasyMesh和802.11s对比
  20. Java多线程排序--睡眠排序

热门文章

  1. 现学现用-我的第三个小小小私活
  2. python文件夹自动备份,一个Python程序,可以帮助您自动备份文件
  3. CSDN 技能树使用体验与产品分析
  4. 中国电信智能网-呈现出广阔的发展前景
  5. 关于【Stable-Diffusion WEBUI】方方面面研究(内容索引)
  6. python打印九九乘法表儿歌下载_python之打印九九乘法表
  7. iis服务器修改端口,Apache、Nginx、IIS服务器修改网站端口教程
  8. CRICQSCRI2012MCRIGAI显色性计算软件工具
  9. 网络钓鱼活动从虚假应用转向供应链攻击
  10. 一文彻底搞懂 DvaJS 原理