这三条 SQL 语句用于查询 MySQL 数据库中的锁和事务信息。下面是对每条语句的解释:

  1. 查看当前的锁
SELECT * FROM information_schema.INNODB_LOCKS;

这条语句查询 INNODB_LOCKS 表,该表提供了当前被持有的所有锁的信息。返回的结果集包含了以下字段:

  • lock_id:锁的唯一标识符。
  • lock_trx_id:持有该锁的事务的 ID。
  • lock_mode:锁的模式(例如,S 表示共享锁,X 表示排它锁)。
  • lock_type:锁的类型(例如,RECCORD 表示记录锁,TABLE 表示表锁)。
  • lock_table:被锁定的表的名称。
  • lock_index:被锁定的索引的名称(如果有)。
  • lock_space:被锁定的空间的 ID(对于表锁,这通常是 0)。
  • lock_page:被锁定的页码(对于行锁,这通常是 0)。
  • lock_rec:被锁定的记录号(对于行锁)。
  • lock_data:被锁定的数据(对于行锁,这通常是记录的内容)。
  1. 查看锁等待
SELECT * FROM information_schema.INNODB_LOCK_WAITS;

这条语句查询 INNODB_LOCK_WAITS 表,该表提供了锁等待关系的信息。返回的结果集包含了两个主要的字段:

  • requesting_trx_id:正在等待锁的事务的 ID。
  • requested_lock_id:事务正在等待的锁的 ID。
    这个表通常与 INNODB_LOCKS 表联合查询,以找出哪些事务正在等待哪些锁。由于 INNODB_LOCK_WAITS 表中的记录相对较少,因此这个查询通常返回的结果集也较小。
  1. 查看当前的事务
SELECT * FROM information_schema.INNODB_TRX;

这条语句查询 INNODB_TRX 表,该表提供了当前活跃的事务的信息。返回的结果集包含了以下字段:

  • trx_id:事务的唯一标识符。
  • trx_state:事务的状态(例如,RUNNING、LOCK WAIT、SLEEPING)。
  • trx_started:事务开始的时间。
  • trx_requested_lock_id:事务正在请求的锁的 ID(如果有)。
  • trx_wait_started:事务开始等待锁的时间(如果有)。
  • trx_weight:事务的权重,表示事务执行的工作量。
  • trx_mysql_thread_id:与事务关联的 MySQL 线程的 ID。
  • trx_query:事务正在执行的 SQL 查询(如果有)。
  • trx_operation_state:事务当前操作的状态。
  • trx_tables_in_use:事务正在使用的表的数量。
  • trx_tables_locked:事务锁定的表的数量。
  • trx_lock_structs:事务持有的锁结构的数量。
  • trx_lock_memory_bytes:事务使用的锁内存的大小。
  • trx_rows_locked:事务锁定的行的数量。
  • trx_rows_modified:事务修改的行的数量。
  • trx_concurrency_tickets:事务持有的并发票证的数量。
  • trx_isolation_level:事务的隔离级别。
  • trx_unique_checks:事务执行的唯一性检查。
  • trx_foreign_key_checks:事务执行的外键检查。
  • trx_last_foreign_key_error:事务遇到的最后一次外键错误。
  • trx_started:事务开始的时间戳。
  • trx_requested_lock_id:事务请求的锁的 ID。
  • trx_wait_started:事务等待锁开始的时间戳。