首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在执行select查询时,哪些行获得锁

在执行select查询时,一般情况下不会获得行级锁。行级锁主要用于控制并发事务对数据的访问和修改,以保证数据的一致性和完整性。而select查询通常是读取数据而不对数据进行修改,因此不需要获得行级锁。

然而,在某些特殊情况下,select查询可能会获得锁。这些情况包括:

  1. 当使用了锁表语句(如LOCK TABLES)时,select查询可能会获得表级锁或全局锁,以防止其他事务对表进行修改。
  2. 当使用了事务隔离级别为SERIALIZABLE时,select查询会在读取数据时对相应的行进行加锁,以确保其他事务不能修改这些行。
  3. 当使用了FOR UPDATE子句时,select查询会对查询结果集中的行进行加锁,以防止其他事务修改这些行。

需要注意的是,获得锁可能会对系统的性能产生一定的影响,因此在设计数据库和应用程序时,需要根据具体的业务需求和并发访问情况来合理地使用锁机制。

腾讯云提供了一系列的云计算产品,包括云数据库、云服务器、云原生应用平台等,可以满足不同场景下的需求。具体产品信息和介绍可以参考腾讯云官方网站:https://cloud.tencent.com/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【建议收藏】MySQL 三万字精华总结 —锁机制和性能调优(四)「建议收藏」

InnoDB 行锁 InnoDB 实现了以下两种类型的行锁: 共享锁(S):允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。...在进行事务操作时,通过“for update”语句,MySQL会对查询结果集中每行数据都添加排他锁,其他线程对该记录的更新与删除操作都会阻塞。排他锁包含行锁、表锁。...InnoDB避免死锁: 为了在单个InnoDB表上执行多个并发写入操作时避免死锁,可以在事务开始时通过为预期要修改的每个元祖(行)使用SELECT ......FOR UPDATE语句来获取必要的锁,即使这些行的更改语句是在之后才执行的。...在事务中,如果要更新记录,应该直接申请足够级别的锁,即排他锁,而不应先申请共享锁、更新时再申请排他锁,因为这时候当用户再申请排他锁时,其他事务可能又已经获得了相同记录的共享锁,从而造成锁冲突,甚至死锁

86630
  • 【建议收藏】MySQL 三万字精华总结 —锁机制和性能调优(四)

    InnoDB 行锁 InnoDB 实现了以下两种类型的行锁: 共享锁(S):允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。...在进行事务操作时,通过“for update”语句,MySQL会对查询结果集中每行数据都添加排他锁,其他线程对该记录的更新与删除操作都会阻塞。排他锁包含行锁、表锁。...InnoDB避免死锁: 为了在单个InnoDB表上执行多个并发写入操作时避免死锁,可以在事务开始时通过为预期要修改的每个元祖(行)使用SELECT ......FOR UPDATE语句来获取必要的锁,即使这些行的更改语句是在之后才执行的。...在事务中,如果要更新记录,应该直接申请足够级别的锁,即排他锁,而不应先申请共享锁、更新时再申请排他锁,因为这时候当用户再申请排他锁时,其他事务可能又已经获得了相同记录的共享锁,从而造成锁冲突,甚至死锁

    95310

    mysql事务隔离级别详解和实战

    获得共享锁的事务只能读数据,不能修改数据。 用法 SELECT ......LOCK IN SHARE MODE; 在查询语句后面增加 LOCK IN SHARE MODE,Mysql会对查询结果中的每行都加共享锁,当没有其他线程对查询结果集中的任何一行使用排他锁时,可以成功申请共享锁...FOR UPDATE; 在查询语句后面增加 FOR UPDATE,Mysql会对查询结果中的每行都加排他锁,当没有其他线程对查询结果集中的任何一行使用排他锁时,可以成功申请排他锁,否则会被阻塞。...而在InnoDB中,锁是逐步获得的,就造成了死锁的可能。 在MySQL中,行级锁并不是直接锁记录,而是锁索引。...SERIALIZABLE事务隔离级别最严厉,在进行查询时就会对表或行加上共享锁,其他事务对该表将只能进行读操作,而不能进行写操作。

    86620

    8000字 | 32 张图 | 一文搞懂事务+隔离级别+阻塞+死锁

    其他事务获得了某个资源的任何其他类型的锁,则当前事务不能获得该资源的排他锁。 「(2)共享锁」 共享锁 a.当试图读取数据时,事务默认会为所依赖的数据资源请求共享锁。...2.5 锁升级 SQL Server可以先获得细粒度的锁(例如行或页),在某些情况下将细粒度锁升级为更粗粒度的锁(例如,表)。...视图 (1)该动态视图可以查询出哪些资源被哪个进程ID锁了 (2)查询出对资源授予或正在等待的锁模式 (3)查询出被锁定资源的类型 上面的查询语句3已经用到了这个视图,可以参考上图中的分析说明。...(2)读操作不会妨碍写操作请求排他锁,其他事务正在进行读操作时,写操作可以同时对这些数据进行修改。 (3)事务A进行了多次修改,事务B在不同阶段进行查询时可能会有不同的结果。...(2)在获得共享锁的事务完成之前,没有其他事务能够获得排他锁修改这一数据资源,且当其他事务增加能够满足当前事务的读操作的查询搜索条件的新行时,其他事务将会被阻塞,直到当前事务完成然后释放共享锁,其他事务才能获得排他锁进行插入操作

    38120

    8000字 | 32 张图 | 一文搞懂事务+隔离级别+阻塞+死锁

    其他事务获得了某个资源的任何其他类型的锁,则当前事务不能获得该资源的排他锁。 「(2)共享锁」 共享锁 a.当试图读取数据时,事务默认会为所依赖的数据资源请求共享锁。...2.5 锁升级 SQL Server可以先获得细粒度的锁(例如行或页),在某些情况下将细粒度锁升级为更粗粒度的锁(例如,表)。...视图 (1)该动态视图可以查询出哪些资源被哪个进程ID锁了 (2)查询出对资源授予或正在等待的锁模式 (3)查询出被锁定资源的类型 上面的查询语句3已经用到了这个视图,可以参考上图中的分析说明。...(2)读操作不会妨碍写操作请求排他锁,其他事务正在进行读操作时,写操作可以同时对这些数据进行修改。 (3)事务A进行了多次修改,事务B在不同阶段进行查询时可能会有不同的结果。...(2)在获得共享锁的事务完成之前,没有其他事务能够获得排他锁修改这一数据资源,且当其他事务增加能够满足当前事务的读操作的查询搜索条件的新行时,其他事务将会被阻塞,直到当前事务完成然后释放共享锁,其他事务才能获得排他锁进行插入操作

    91231

    30分钟全面解析-SQL事务+隔离级别+阻塞+死锁

    5.锁升级 SQL Server可以先获得细粒度的锁(例如行或页),在某些情况下将细粒度锁升级为更粗粒度的锁(例如,表)。...资源,排他锁 (2)分析阻塞 ★ 1.sys.dm_tran_locks 视图 (1)该动态视图可以查询出哪些资源被哪个进程ID锁了 (2)查询出对资源授予或正在等待的锁模式 (3...(2)读操作不会妨碍写操作请求排他锁,其他事务正在进行读操作时,写操作可以同时对这些数据进行修改。 (3)事务A进行了多次修改,事务B在不同阶段进行查询时可能会有不同的结果。...(2)在获得共享锁的事务完成之前,没有其他事务能够获得排他锁修改这一数据资源,这样可以保证实现可重复的读取。...(2)在获得共享锁的事务完成之前,没有其他事务能够获得排他锁修改这一数据资源,且当其他事务增加能够满足当前事务的读操作的查询搜索条件的新行时,其他事务将会被阻塞,直到当前事务完成然后释放共享锁,其他事务才能获得排他锁进行插入操作

    1.5K60

    30分钟全面解析-SQL事务+隔离级别+阻塞+死锁

    事务中进行的修改,要么全部执行,要么全都不执行; 2.在事务完成之前(提交指令被记录到事务日志之前),系统出现故障或重新启动,SQL Server将会撤销在事务中进行的所有修改; 3.事务在处理中遇到错误...1.同时发生的事务在修改和查询数据时不发生冲突; 2.一致性取决于应用程序的需要。后面会讲到一致性级别,以及如何对一致性进行控制。 (3)隔离性Isolation ?...如:当前事务获得了某个资源的排他锁,则其他事务不能获得该资源的任何其他类型的锁。其他事务获得了某个资源的任何其他类型的锁,则当前事务不能获得该资源的排他锁。...5.锁升级 SQL Server可以先获得细粒度的锁(例如行或页),在某些情况下将细粒度锁升级为更粗粒度的锁(例如,表)。...例如单个语句获得至少5000个锁,就会触发锁升级,如果由于锁冲突而导致无法升级锁,则SQL Server每当获取1250个新锁时出发锁升级。

    1.9K50

    MYSQL锁学习笔记

    (Parser)负责解析并校验SQL语句 查询缓存(Query Cache)负责对执行过的SQL语句结果进行缓存,当发现有类似的查询请求命中缓存时,则会直接返回缓存中的查询结果。...Explain执行后生成的数据如下: 列名 含义 id SELECT语句的SQL_ID,它是指这个语句在查询中的第n条语句,如果两个id相同,则代表按照顺序执行从上到下执行,id值越大,优先级越高,越先被执行...: 同上,只是IN中查询数据不唯一 range:获取特定范围内的数据,使用索引来决定哪些是这个范围内的数据。...for update, update, delete) 意向锁(IS/IX)表级别锁,当获得该表/行的共享/排他锁时,会对该表加上意向共享/排他锁。...这样别的表级别锁来试图锁表时,可以直接通过意向锁来判断该表中是否存在共享/排他锁,而无需对表中的每一行判断是否有行级锁,降低封锁成本,提高并发性能 意向锁和意向锁之间是兼容的,而意向锁和行锁之间也是兼容

    85520

    对线面试官 - MySQL隔离级别 、锁机制

    事务id,在mysql内部是全局唯一递增的,事务id=1,事务id=2,事务id=3 在一个事务内查询的时候,mysql只会查询创建时间的事务id小于等于当前事务id的行,这样可以确保这个行是在当前事务中创建...RR 关键点在于每次查询都生成新的ReadView RC 不会生成新的ReadView 面试官:不错,那我们继续聊一聊MySQL锁类型有哪些吧? 派大星:表锁,行锁,和页锁(几乎很少使用)。...MyIsam使用的就是表锁,在默认情况下执行查询的时候会加个表共享锁,也就是表读锁。这个时候其他请求只能查询数据不能修改数据。...派大星: MySQL中的悲观锁指的就是select * from table where id = 1 for update。简单理解就是它担心自己拿不到锁,所以会先锁定,不允许其他请求再获得锁。...适用于数据读取远远多于数据更新的场景,减少锁的开销。 希望通过版本号等机制来避免并发冲突,同时在冲突发生时能够进行特定处理。 面试官:嗯,那你了解MySQL死锁原理嘛?

    20920

    mysql 锁表详解

    MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁。...这样MyISAM表在进行大量的更新操作时(特别是更新的字段中存在索引的情况下),会造成查询操作很难获得读锁,从而导致查询阻塞。...行级的典型代表引擎为INNODB。 2、我们实际应用中用的最多的就是行锁了。 行级锁的优点如下: 1)、当很多连接分别进行不同的查询时减小LOCK状态。...如下图所示,在某个时刻,用户甲、用户乙、用户丙可能会同时或者先后(前面一个作业还没有完成) 对数据表A进行查询或者更新的操作。当某个线程涉及到更新操作时,就需要获得独占的访问权。...SELECT和UPDATE语句之间在trans表中插入一个新行。

    3.4K10

    MySQL 中的锁机制

    如果某个事务已经获得了对象的独占锁,则其他尝试获取锁(包括共享锁、独占锁)的事务必须等待,直到加锁成功才能继续执行解锁阶段:在解锁阶段只能进行解锁操作。...不适合用在数据库:一次封锁不适合用在数据库中,因为在事务开始阶段,数据库并不知道会用到哪些数据。一次封锁的好处:不会出现死锁。------为什么要使用两段锁呢?用完直接释放锁不行吗?...------意向锁分为:意向共享锁、意向独占锁:当事务准备在某条记录上加 共享锁 时,需要先在表级别加一个 意向共享锁;当事务准备在某条记录上加 独占锁 时,需要先在表级别加一个 意向独占锁。...因此执行 DDL 操作时要格外注意,如果操作执行时间过长,后面的 DML 操作都将被阻塞较长时间。行级锁行级锁就是对记录加锁。...在 加读写锁的 select、update 和 delete 时,除了基于唯一索引(主键索引也属于唯一索引)的查询之外,基于其他索引查询时都会加间隙锁。

    87020

    MySQL内部架构与事务面试题合集

    在优化器阶段Optimizer:查询优化器: 54、MySQL 支持哪些存储引擎?默认使用哪个?...)时 InnoDB使用的都是行级锁,只锁一行数据,其他行数据不影响,并发能力强。...共享锁或S锁,其它事务可以继续加共享锁,但不能加排它锁 82、什么是排它锁(写锁/独占锁)? 排它锁或X锁,在进行写操作之前要申请并获得,其它事务不能再获得任何锁。 83、什么是意向锁?...在进行事务操作时,通过“for update”语句,MySQL会对查询结果集中每行数据都添加排他锁,其他线程对该记录的更新与删除操作都会阻塞。排他锁包含行锁、表锁。...,则提示锁冲突,不返回结果 select * from t for update skip locked 查询返回查询结果,但忽略有行锁的记录 091说一下MySQL死锁的原因和处理方法 事务 a

    31410

    MySQL中的锁(表锁、行锁,共享锁,排它锁,间隙锁)

    如何加表锁 MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作 (UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁,这个过程并不需要用户干预,...也就是说,在执行LOCK TABLES后,只能访问显式加锁的这些表,不能访问未加锁的表;同时,如果加的是读锁,那么只能执行查询操作,而不能执行更新操作。...在一个支持MVCC并发控制的系统中,哪些读操作是快照读?哪些操作又是当前读呢?以MySQL InnoDB为例: 快照读:简单的select操作,属于快照读,不加锁。...因此,在分析锁冲突 时,别忘了检查SQL的执行计划,以确认是否真正使用了索引。...(2)在一定条件下,MyISAM允许查询和插入并发执行,我们可以利用这一点来解决应用中对同一表查询和插入的锁争用问题。

    2.5K30

    MySQL数据库:锁机制

    MySQL锁机制的基本工作原理就是,事务在修改数据库之前,需要先获得相应的锁,获得锁的事务才可以修改数据;在该事务操作期间,这部分的数据是锁定,其他事务如果需要修改数据,需要等待当前事务提交或回滚后释放锁...: 共享锁(S锁、读锁):多个事务可以对同一数据行共享一把S锁,但只能进行读不能修改; 排它锁(X锁、写锁):一个事务获取排它锁之后,可以对锁定范围内的数据行执行写操作,在锁定期间,其他事务不能再获取这部分数据行的锁...select * from table for update 语句:目的是在执行这个 select 查询语句的时候,会将对应的索引访问条目进行上排他锁(X 锁),并且查到后的数据只允许自己来修改。...MyISAM在执行查询语句前,会自动给涉及的所有表加读锁,在执行增删改查操作前,会自动给涉及的表加写锁。读锁会阻塞写锁,但不会阻塞读锁,而写锁则会把写锁和读锁都阻塞。...这样MyISAM表在进行大量的更新操作时,会造成查询操作很难获得读锁,从而导致查询阻塞。

    1.5K30

    Mysql基础篇--面试锁机制

    页级锁定 他是一种独特的锁机制,他的锁颗粒度介于行级锁和表级锁之间,资源开销和并发能力也是在两者之间,另外他也会发生死锁。..., 0 rows affected (0.01 sec) Innodb存储引擎锁机制 共享锁和排他锁是行锁,意向锁都是表锁 共享锁:允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。...意向共享锁:事务打算给数据行加行共享锁,事务在给一个数据行加行共享锁前必须先获得该表的IS锁 意向排他锁:事务打算给数据行加行排他锁,事物在给一个数据行加排他锁前必须获取该表的IX锁。...select ...in share mode 获得共享锁,主要用于数据依存关系时,确认某行是否存在,并确认没有人对这个记录进行update 和delete操作,但是如果其他事物也需要对该记录进行更新很可能造成死锁...session1 先查看记录,有哪些数据,在使用a1 更新操作 mysql> select * from test_innodb_lock; +------+------+ | a

    40810

    mysql锁表和解锁语句_db2查看是否锁表

    MyISAM加表锁方法: MyISAM 在执行查询语句(SELECT)前,会自动给涉及的表加读锁,在执行更新操作 (UPDATE、DELETE、INSERT 等)前,会自动给涉及的表加写锁,这个过程并不需要用户干预...其他 session 可以查询该记录,但是不能对该记录加共享锁或排他锁,而是等待获得锁 隐式锁定: InnoDB在事务执行过程中,使用两阶段锁协议: 随时都可以执行锁定,InnoDB会根据隔离级别在需要的时候自动加锁...; 锁只有在执行commit或者rollback的时候才会释放,并且所有的锁都是在同一时刻被释放。...才后会释放 select for update: 在执行这个 select 查询语句的时候,会将对应的索引访问条目进行上排他锁(X 锁),也就是说这个语句对应的锁就相当于update带来的效果。...InnoDB手动加锁避免死锁: 为了在单个InnoDB表上执行多个并发写入操作时避免死锁,可以在事务开始时通过为预期要修改的每个元祖(行)使用SELECT … FOR UPDATE语句来获取必要的锁,即使这些行的更改语句是在之后才执行的

    3.2K40

    MySQL(二)|深入理解MySQL的四种隔离级别及加锁实现原理

    接下来的其它操作或故障不应该对其执行结果有任何影响。 三、MySQL的四种隔离级别 SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。...幻读(Phantom Read):在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列(Row)数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的...在对任何数据进行读操作之前要申请并获得S锁(共享锁,其它事务可以继续加共享锁,但不能加排它锁),在进行写操作之前要申请并获得X锁(排它锁,其它事务不能再获得任何锁)。...在可重读Repeatable reads事务隔离级别下: SELECT时,读取创建版本号当前事务版本号。...行锁防止别的事务修改或删除,GAP锁防止别的事务新增,行锁和GAP锁结合形成的的Next-Key锁共同解决了RR级别在写数据时的幻读问题。

    2.6K71

    再谈mysql锁机制及原理—锁的诠释

    行级锁更适合于有大量按索引条件并发更新少量不同数据,同时又有并发查询的应用,如一些在线事务处理(OLTP)系统 在 InnoDB 中,除单个 SQL 组成的事务外,锁是逐步获得的,这就决定了在 InnoDB...其他 session 可以查询该记录,但是不能对该记录加共享锁或排他锁,而是等待获得锁 隐式锁定: InnoDB在事务执行过程中,使用两阶段锁协议: 随时都可以执行锁定,InnoDB会根据隔离级别在需要的时候自动加锁...; 锁只有在执行commit或者rollback的时候才会释放,并且所有的锁都是在同一时刻被释放。...MyISAM加表锁方法: 在执行查询语句(SELECT)前,会自动给涉及的表加读锁 在执行更新操作(UPDATE、DELETE、INSERT 等)前,会自动给涉及的表加写锁 这个过程并不需要用户干预,因此...InnoDB避免死锁: 为了在单个InnoDB表上执行多个并发写入操作时避免死锁,可以在事务开始时通过为预期要修改的每个元祖(行)使用SELECT ...

    1.5K01
    领券