zoukankan      html  css  js  c++  java
  • 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 表锁和行锁机制

  • 相关阅读:
    实验
    概率与期望
    2020CSP-S模板
    洛谷:P2538 [SCOI2008]城堡
    洛谷P1731 生日蛋糕
    洛谷 P1180 石子合并
    洛谷 P2831 愤怒的小鸟
    浅谈状压DP
    浅谈线段树
    LCA-树链剖分
  • 原文地址:https://www.cnblogs.com/atomy/p/13643179.html
Copyright © 2011-2022 走看看