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 表锁和行锁机制

  • 相关阅读:
    我们是如何实现DevOps的
    cmp命令
    全排列II
    chown命令
    两个数组的交集II
    MVVM模式的理解
    chmod命令
    路径总和
    cat命令
    跳水板
  • 原文地址:https://www.cnblogs.com/atomy/p/13643179.html
Copyright © 2011-2022 走看看