一、锁表解锁

#查询是否锁表
SHOW OPEN TABLES WHERE IN_USE>0;

#查询进程
SHOW PROCESSLIST

#杀死进程(一般到这一步就解锁了)
KILL ID;

#查看正运行的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;;

#查看正在锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;

#查看等待锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;

#解锁表
UNLOCK TABLES;

二、加行锁

2.1、创建行锁条件

1)表中创建索引,SELECT ... WHERE 字段(必须是索引,否则行锁无效)。

注:InnoDB的行锁是针对索引加的锁,不是针对记录加的锁,并且该索引不能失效,否则都会从行锁升级为表锁。

2、必须要有事务,这样才是行锁(排他锁)。

3、在SELECT语句后面加上FOR UPDATE。

2.2、示例

#加事务
START TRANSACTION;
#加锁
SELECT * FROM EMP WHERE ID<=10 FOR UPDATE;
#解析
EXPLAIN SELECT * FROM EMP WHERE ID<=10 FOR UPDATE;
#睡眠
SELECT SLEEP(3);
#提交
COMMIT;

#加事务
START TRANSACTION;
#加锁
SELECT * FROM EMP WHERE ID BETWEEN 11 AND 20 FOR UPDATE;
#解析
EXPLAIN SELECT * FROM EMP WHERE ID BETWEEN 11 AND 20 FOR UPDATE;
#提交
COMMIT;

 

推荐博文:MySQL 表锁和行锁机制

相关文章:

  • 2022-12-23
  • 2021-09-09
猜你喜欢
  • 2021-05-26
  • 2021-09-28
  • 2021-10-02
  • 2022-03-11
  • 2021-09-07
  • 2021-07-18
相关资源
相似解决方案