Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


17.15.2.2 InnoDB 锁和锁等待信息

当事务更新表中的行或使用SELECT FOR UPDATE锁定该行时,InnoDB会为该行建立一个锁定的列表或队列。类似地,InnoDB也维护了表级别的锁定列表。如果第二个事务想要更新已经被前一个事务锁定的行或表,以不兼容的模式锁定,那么InnoDB将为该行添加一个锁定请求到对应队列中。为了使事务获取锁定,所有之前进入该行或表锁定队列中的不兼容锁定请求都必须被删除(这发生在持有或请求这些锁定的事务提交或回滚时)。

事务可以对不同的行或表请求任意数量的锁定。在任何给定的时间,事务可能会请求已经被其他事务持有的锁定,在这种情况下,它将被阻塞由该事务持有的锁定的事务。请求锁定的事务必须等待持有阻塞锁定的事务提交或回滚。如果事务不在等待锁定状态,那么它处于RUNNING状态;如果事务在等待锁定,那么它处于LOCK WAIT状态。(INFORMATION_ SCHEMAINNODB_TRX表中显示事务状态值。)

性能_schema中的data_locks表中包含每个LOCK WAIT事务的一行或多行,表示任何阻止其进度的锁请求。此外,该表还包含对某个行或表的锁队列中的每个锁描述。性能_schema中的data_lock_waits表显示了哪些锁已经被事务持有,阻止其他事务请求的锁。