首页
学习
活动
专区
工具
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语句来获取必要的,即使这些的更改语句是之后才执行的。...事务中,如果要更新记录,应该直接申请足够级别的,即排他,而不应先申请共享、更新再申请排他,因为这时候当用户再申请排他,其他事务可能又已经获得了相同记录的共享,从而造成冲突,甚至死锁

81530

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

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

89310

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

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

81820

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

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

34520

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

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

84431

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

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

1.4K60

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)表级别,当获得该表/的共享/排他,会对该表加上意向共享/排他。...这样别的表级别来试图,可以直接通过意向来判断该表中是否存在共享/排他,而无需对表中的每一判断是否有,降低封锁成本,提高并发性能 意向和意向之间是兼容的,而意向之间也是兼容

83220

对线面试官 - 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死锁原理嘛?

18120

MySQL 中的机制

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

82520

mysql 表详解

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

3.4K10

MySQL中的(表,共享,排它,间隙

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

2.4K30

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

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

23410

MySQL数据库:机制

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

1.4K30

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

38610

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.1K40

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

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

2K71

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

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

1.1K01
领券