2020-09-11

MySQL学习笔记十二:锁表解锁与加行锁

一、锁表解锁

#查询是否锁表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 表锁和行锁机制

MySQL学习笔记十二:锁表解锁与加行锁"跨境电商·路在何方"跨境电商交流沙龙Wish政策0-3个月初阶运营POCO大卖亲述:如何实现从0到30万美金月销售额的逆袭?卖家福音!提高黑五销量的策略在这里!流量当道的今天,亚马逊卖家应该在什么时候做站外推广?卖家注意!亚马逊接连几条公告袭来

No comments:

Post a Comment