==============================================================
共享锁(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 8.0 中的锁机制可以分为共享锁和排他锁两大类。共享锁(S)允许拥有共享锁的事务读取该行数据,而排他锁(X)允许拥有排他锁的事务修改或删除该行数据。此外,InnoDB 存储引擎还支持意图锁,意图锁是表级锁,...
排他锁与共享锁相反,它不允许其他线程同时读取或写入数据。在SQL中,`SELECT ... FOR UPDATE`也可以用来获取排他锁,确保在修改数据时没有其他线程干扰。这种方式保障了数据的一致性,但并发性较低。 4. **乐观锁...
在MySQL的InnoDB引擎中,支持行级锁(Row Locks)、表级锁(Table Locks),以及共享锁(Shared Locks)和排他锁(Exclusive Locks)。行级锁通过索引实现,如果SQL语句没有利用索引,则会升级为表锁。 行锁具有...
- MySQL 的共享锁和排他锁就是悲观锁的实现。 2. 乐观锁: - 假设不会发生冲突,只有在更新数据时检查是否被其他事务修改。 - 通常通过版本号或时间戳实现,MySQL 中没有内置的乐观锁,但可以在应用层面实现。 ...
MySQL中的锁大致可以分为两大类:从数据库系统的角度,包括独占锁(排他锁)、共享锁、更新锁以及各种类型的意向锁;从锁的作用范围,可以分为行级锁、表级锁和页级锁等。下面我们将详细讨论这些锁的特性。 1. **...
下面我们将详细探讨MySQL中的锁机制以及Java如何与之协同工作。 **MySQL中的锁** MySQL数据库提供了多种锁机制来确保数据的一致性和完整性,主要分为两大类:行级锁和表级锁。 1. **行级锁**:这种类型的锁只锁定...
- 按锁的级别分为:共享锁和排他锁。 - 按加锁的方式分为:乐观锁和悲观锁。 4. 行锁的原理与算法: 行锁是指只对数据库表中某一行记录加锁,MySQL中InnoDB存储引擎支持行锁,其目的是减少锁冲突,提高并发性。行锁...
- **共享锁(Shared Locks)**:允许读取一行数据,但不允许修改,与其他共享锁并存。 - **排他锁(Exclusive Locks)**:允许读取和修改一行数据,阻止其他事务获取任何类型的锁。 - **Next-Key Locks(行锁+...
首先,我们要了解MySQL中的两种主要锁类型:共享锁(Shared Locks)和排他锁(Exclusive Locks)。共享锁允许一个事务读取一行,而排他锁则允许事务对行进行读写操作。当一个事务持有共享锁时,其他事务可以再获取...
在MySQL的InnoDB存储引擎中,锁机制包括多种类型,如共享锁、排他锁、意向锁、记录锁、间隙锁、临键锁、插入意向锁以及自增锁。 1. **共享/排它锁**: - **共享锁(Shared Locks, S锁)**:当事务执行读操作时,会...
在 InnoDB 引擎中,我们可以使用行锁和表锁,其中行锁又分为共享锁和排他锁。 * Record Lock 锁:锁定单个行记录的锁。 * Gap Lock 锁:间隙锁,锁定索引记录间隙,确保索引记录的间隙不变。 * Next-key Lock 锁:...
1. 从数据操作的类型分类,分为锁定读(共享锁/读锁)和锁定写(排他锁/写锁)。共享锁允许多个事务同时读取同一数据,而排他锁则阻止其他事务在数据被修改期间读取或修改。 2. 从数据操作的粒度划分,有表锁、行锁...
不要把他们与mysql中提供的锁机制(表锁,行锁,排他锁,共享锁)混为一谈。 一、悲观锁 顾名思义,就是对于数据的处理持悲观态度,总认为会发生并发冲突,获取和修改数据时,别人会修改数据。所以在整个数据处理过程...
- 表级锁是一种粒度较大的锁,它锁定的是整个表,分为读锁(共享锁)和写锁(排他锁)。 - 读锁(`SELECT ... LOCK IN SHARE MODE`)允许多个事务同时读取同一张表,但不允许写入。 - 写锁(`SELECT ... FOR ...
行级锁分为共享锁(读锁)和排他锁(写锁),它能有效减少数据冲突,提高并发度。然而,行级锁的开销较大,加锁慢,可能发生死锁。行级锁仅在InnoDB引擎中支持,且依赖于索引,只有通过索引条件检索数据时才会使用...