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

  • 相关阅读:
    算法 在一个递增的二维数组中查找一个数
    java web----网络编程基础
    java----集合(Map)
    java----集合(List、set)
    java----数组
    java面试----1
    java----NIO
    java----commons-io
    java----文件操作
    爬虫----爬取答案
  • 原文地址:https://www.cnblogs.com/atomy/p/13643179.html
Copyright © 2011-2022 走看看