在一个事务中,MySQL的查询语句会锁住要查询的行吗

80 阅读1分钟

在 MySQL 中,默认情况下,读操作(查询语句)不会锁定要查询的行。这种情况下,称之为非锁定读(Non-locking Reads)或者是快照读(Snapshot Reads),它们不会对其他事务的写操作产生阻塞。

但是,在某些情况下,MySQL 也会对查询的行进行锁定,主要有两种情况:

  1. 当使用了写锁(例如 LOCK TABLES 或者 SELECT ... FOR UPDATE)时,会锁定查询的行,其他事务无法对这些行进行修改。
  2. 当执行某些特定的查询时,MySQL 会根据隔离级别以及查询的条件来确定是否需要对查询的行进行加锁。比如在读取数据时,如果使用了 SELECT ... FOR UPDATE 或者 SELECT ... LOCK IN SHARE MODE,MySQL 会对查询的行进行锁定,以保证数据的一致性。

综上所述,一般情况下,在一个事务中的查询语句不会锁住要查询的行,但是在特定的情况下,MySQL 可能会对查询的行进行锁定。