Mysql进行查询操作会加那些锁
InnoDB引擎支持的数据库查数据时,默认是锁行
在使用 InnoDB 引擎的 MySQL 查询数据时,默认情况下 是锁行,而不是锁表。InnoDB 引擎支持 行级锁,它会尽可能地使用行级锁来提高并发性能,避免不必要的锁竞争和死锁。
不过,具体会锁表还是锁行取决于以下几个因素:
1. 普通 SELECT 查询(没有显式的 FOR UPDATE 或 LOCK IN SHARE MODE):
-
默认情况下,不会加锁,或者只会加 意向锁,这是为了提供数据的一致性和隔离性。它只会加一个 意向****共享锁(Intention Shared Lock),表明事务计划对某些行加共享锁。
-
这样,多个事务可以并发读取数据,但不允许其他事务修改这些数据行。
2. SELECT ... FOR UPDATE 查询:
-
这种查询会对返回的每一行加 排他锁(Exclusive Lock),即 行级锁。这样,其他事务不能修改或读取这些行,直到当前事务提交。
-
只有当前事务才能修改这些行,因此它是用于需要保证读取数据后不会被其他事务修改的场景。
3. SELECT ... LOCK IN SHARE MODE 查询:
-
这种查询会对返回的每一行加 共享锁(Shared Lock)。这允许其他事务也可以读取这些行(也可以加共享锁),但不能对这些行进行修改。
-
它适用于只需要读取数据并保证数据一致性的场景。
坚冰还盖着北海的时候,我看到了怒放的梅花。

浙公网安备 33010602011771号