一、锁表解锁
#查询是否锁表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