`

MySQL中的共享锁与排他锁

 
阅读更多

==============================================================

共享锁(Share Lock)

共享锁又称读锁,是读取操作创建的锁。其他用户可以并发读取数据,但任何事务都不能对数据进行修改(获取数据上的排他锁),直到已释放所有共享锁。

如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。

用法

SELECT ... LOCK IN SHARE MODE;

在查询语句后面增加LOCK IN SHARE MODE,Mysql会对查询结果中的每行都加共享锁,当没有其他线程对查询结果集中的任何一行使用排他锁时,可以成功申请共享锁,否则会被阻塞。其他线程也可以读取使用了共享锁的表,而且这些线程读取的是同一个版本的数据。

排他锁(eXclusive Lock)

排他锁又称写锁,如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。

用法

SELECT ... FOR UPDATE;

在查询语句后面增加FOR UPDATE,Mysql会对查询结果中的每行都加排他锁,当没有其他线程对查询结果集中的任何一行使用排他锁时,可以成功申请排他锁,否则会被阻塞。

意向锁

意向锁是表级锁,其设计目的主要是为了在一个事务中揭示下一行将要被请求锁的类型。InnoDB中的两个表锁:

意向共享锁(IS):表示事务准备给数据行加入共享锁,也就是说一个数据行加共享锁前必须先取得该表的IS锁

意向排他锁(IX):类似上面,表示事务准备给数据行加入排他锁,说明事务在一个数据行加排他锁前必须先取得该表的IX锁。

意向锁是InnoDB自动加的,不需要用户干预。

对于insert、update、delete,InnoDB会自动给涉及的数据加排他锁(X);对于一般的Select语句,InnoDB不会加任何锁,事务可以通过以下语句给显示加共享锁或排他锁。

共享锁:SELECT ... LOCK IN SHARE MODE;

排他锁:SELECT ... FOR UPDATE;

分享到:
评论

相关推荐

    mysql共享锁与排他锁用法实例分析

    本文实例讲述了mysql共享锁与排他锁用法。分享给大家供大家参考,具体如下: mysql锁机制分为表级锁和行级锁,本文就和大家分享一下我对mysql中行级锁中的共享锁与排他锁进行分享交流。 共享锁又称为读锁,简称S锁,...

    数据库锁(行锁,表锁,共享锁,排他锁)脏读、不可重复读、幻读和事物隔离级别

    数据库锁(行锁,表锁,共享锁,排他锁) 行锁 我们知道mysql的Innodb引擎是支持行锁的,与Oracle不同,mysql的行锁是通过索引加载的,即行锁是加载索引响应的行上的,要是对应的SQL语句没有索引,则会走表锁。 行锁...

    mysql 悲观锁与乐观锁的理解及应用分析

    不要把他们与mysql中提供的锁机制(表锁,行锁,排他锁,共享锁)混为一谈。 一、悲观锁 顾名思义,就是对于数据的处理持悲观态度,总认为会发生并发冲突,获取和修改数据时,别人会修改数据。所以在整个数据处理过程...

    MySQL中的行级锁、表级锁、页级锁

    行级锁分为共享锁 和 排他锁。 特点 开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 二、表级锁 表级锁是MySQL中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单

    Mysql 行级锁的使用及死锁的预防方案

     名词解释:共享锁又叫做读锁,所有的事务只能对其进行读操作不能写操作,加上共享锁后其他事务不能再加排他锁了只能加行级锁。  用法: SELECT `id` FROM table WHERE id in(1,2) LOCK IN SHARE MODE 结果集的...

    MySQL的InnoDB中的各种锁是怎么工作的

    排他锁`Exclusive Locks`(`X`)1.3 共享锁和排它锁的冲突情况1.4 `共享锁`和`排他锁`用途2. 表级意向锁2.1. 意向共享锁 `Intention Shared Locks` (`IS`)2.2. 意向排他锁 `Intention Exclusive Locks` (`IX`)3. 行锁...

    (mysql面试题)MySQL中的事务和锁的概念及其作用及代码展示.txt

    1. 事务(Transaction): 事务是一个不可分割的工作单位,它包含了一系列的SQL... - 共享锁(Shared Lock):允许多个事务同时读取同一资源,但不允许其他事务对该资源进行写入操作。 - 排他锁(Exclusive Lock):

    mysql数据库锁+优化.pdf

    共享锁(读锁):允许同一个数据被加多个读锁,读取相互不阻塞,但是无法再被添加写锁不允许其他事务修改当前读锁所保护的数据。加锁方式' select. lock in share mode2.排他锁(写锁):当一个数据被加了写锁,其他事务就不...

    【mysql】关于悲观锁

     MySQLInnoDB对数据行的锁定类型一共有四种:共享锁(读锁,S锁)、排他锁(写锁,X锁)、意向共享锁(IS锁)和意向排他锁(IX锁),支持三种行锁定方式:  行锁(RecordLock):锁直接加在索引记录上面。  ...

    解析数据库锁协议和InnoDB的锁机制(全面解析行级锁、表级锁、排他锁、共享锁、悲观锁、乐观锁等常用锁)

    数据库通过锁以及锁协议来进行并发控制,解决并发事务带来的问题,本篇博文主要是解析数据库的锁协议和Mysql的默认存储引擎InnoDB的锁机制。 如果对事务隔离级别以及并发事务带来的问题不熟悉可以翻阅我的另外一篇...

    高并发情况下,MYSQL的锁等待问题分析和解决方案

    共享锁的特性为:不允许其他事务对该记录加排他锁,但是允许加共享锁。 保持时间:可重复度级别中共享锁会保持到事务结束。 排他锁(X锁) MYSQL的默认隔离级别(可重复度)中,UPDATE,INSERT和

    10道精选MySQL面试题

    在什么场景下会使用共享锁和排他锁? 什么是死锁?MySQL如何检测和处理死锁? 分区表是如何工作的?在哪些场景下使用分区表能提升查询或写入性能? 如果业务需要进行水平拆分,你将如何设计分库分表策略?

    MySQL中的行级锁定示例详解

    行级锁分为共享锁和排他锁。 特点: 开销大,加锁慢,会出现死锁;锁定粒度最小,发生锁冲突的概率最大,并发性也高; 实现原理: InnoDB行锁是通过给索引项加锁来实现的,这一点mysql和oracle不同,后者是通过...

    SQL 事务与锁 详解

    本篇博客旨在记录数据库中事务与锁机制的必要性,记录了如何在数据库中使用... 共享锁与排他锁2.2.2. 意向锁2.2.3. 死锁与等待锁2.2.4. 悲观锁与乐观锁3. 事务的ACID特性3.1. ACID特性3.2. 事务的隔离级别与并发问题3.

    MySQL数据库锁机制原理解析

    ③、按锁级别划分:共享锁、排他锁 ④、按加锁方式划分:自动锁、显示锁 ⑤、按使用方式划分:乐观锁、悲观锁 乐观锁和悲观锁 乐观并发控制和悲观并发控制是并发控制采用的主要方法。乐观锁和悲观锁不仅在关系...

    【《数据库与信息系统》复习题及答案】第5章数据库管理与保护.pdf

    其锁分别是:共享锁(S)、排他锁(X)、意向共享锁(IS) 、意向排他锁、⼤容 量更新锁。有些锁之间是兼容的,如共享锁(S),即如果其他事务对资源具有共享锁(S),则 另⼀个事务也可获得共享锁(S); 有些锁之间是不兼容...

    深入分析MSSQL数据库中事务隔离级别和锁机制

    锁机制 NOLOCK和READPAST的区别。...NOLOCK表明没有对数据表添加共享锁以阻止其它事务对数据表数据的修改。 SELECT * FROM Customer 这条语句将一直死锁,直到排他锁解除或者锁超时为止。(注:设置锁超时

    江神JAVA开发面经超级总结

    常见的数据库锁有共享锁、排他锁、更新锁、意向锁等。共享锁允许多个事务同时读取数据,而排他锁则禁止其他事务读取或修改数据。 六、HTTP长连接和短连接 HTTP长连接和短连接是两种不同的HTTP连接方式。长连接是一...

    MySQL InnoDB如何保证事务特性示例详解

    前言 ... 锁(共享、排他)用来保证事务的隔离性 重做日志 redo log 重做日志 redo log 分为两部分:一部分是内存中的重做日志缓冲(redo log buffer),是易丢失的;二部分是重做日志文件(redo lo

Global site tag (gtag.js) - Google Analytics