mysql 锁
1:查看数据库当前的进程,这个命令可以列出当前库所有的线程
mysql> show processlist;
2:查看当前的事物情况
2-1:查询当前数据库运行的所有事物 mysql> SELECT * FROM information_schema.INNODB_TRX; 2-2:查询当前数据库出现的锁 mysql> SELECT * FROM information_schema.INNODB_LOCKs; 2-3:查询锁等待的对应关系 mysql> SELECT * FROM information_schema.INNODB_LOCK_waits;
3:连表查询出所有需要杀掉的进程
mysql> select concat('KILL ',id,';') from information_schema.processlist p inner join information_schema.INNODB_TRX x on p.id=x.trx_mysql_thread_id where db='test';
注:kill掉对应的进程之后,再次查询事物表。为空就可以正常执行了。
表锁
LOCK TABLES a WRITE; INSERT INTO a_copy SELECT * FROM a WHERE create_time < DATE_SUB(NOW(), INTERVAL 3 MONTH); UNLOCK TABLES;
行锁
BEGIN; SELECT * FROM a WHERE create_time < DATE_SUB(NOW(), INTERVAL 3 MONTH) FOR UPDATE; INSERT INTO a_copy SELECT * FROM a WHERE create_time < DATE_SUB(NOW(), INTERVAL 3 MONTH); COMMIT;
查看当前正在被锁定的行:
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; # 8版本mysql SELECT * FROM performance_schema.data_locks; # 这条语句将会显示当前正在被锁定的行的相关信息,包括锁定的会话ID、锁定的表名、锁定的行号等。
查看当前等待锁定的行:
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; # 8版本mysql SELECT * FROM performance_schema.data_lock_waits; # 这条语句将会显示当前正在等待锁定的行的相关信息,包括等待的会话ID、等待的表名、等待的行号等。
查看表状态
SHOW OPEN TABLES; 如果某个表正在被锁定,则其状态为Locked。
查看表锁等待
SHOW FULL PROCESSLIST; 如果某个进程正在等待某个表的锁,则其状态为Waiting for table level lock。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?