Mysql进行查询操作会加那些锁

InnoDB引擎支持的数据库查数据时,默认是锁行

在使用 InnoDB 引擎的 MySQL 查询数据时,默认情况下 是锁行,而不是锁表。InnoDB 引擎支持 行级锁,它会尽可能地使用行级锁来提高并发性能,避免不必要的锁竞争和死锁。

不过,具体会锁表还是锁行取决于以下几个因素:

1. 普通 SELECT 查询(没有显式的 FOR UPDATELOCK IN SHARE MODE):

  • 默认情况下,不会加锁,或者只会加 意向锁,这是为了提供数据的一致性和隔离性。它只会加一个 意向****共享锁(Intention Shared Lock),表明事务计划对某些行加共享锁。

  • 这样,多个事务可以并发读取数据,但不允许其他事务修改这些数据行。

2. SELECT ... FOR UPDATE 查询

  • 这种查询会对返回的每一行加 排他锁(Exclusive Lock),即 行级锁。这样,其他事务不能修改或读取这些行,直到当前事务提交。

  • 只有当前事务才能修改这些行,因此它是用于需要保证读取数据后不会被其他事务修改的场景。

3. SELECT ... LOCK IN SHARE MODE 查询

  • 这种查询会对返回的每一行加 共享锁(Shared Lock)。这允许其他事务也可以读取这些行(也可以加共享锁),但不能对这些行进行修改。

  • 它适用于只需要读取数据并保证数据一致性的场景。

posted @ 2025-03-18 10:52  Zero&&One  阅读(116)  评论(0)    收藏  举报