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

  • 相关阅读:
    jsp第二次作业
    jsp第一个作业
    Android应用程序开发
    第十次作业
    int和Integer比较详解
    com.sun.tools.jar下载失败
    JDK1.7和JDK1.8自由切换
    解析excel
    django 2.0配置url捕获参数
    python使用pymysql链接mysql数据库实现增删改查
  • 原文地址:https://www.cnblogs.com/atomy/p/13643179.html
Copyright © 2011-2022 走看看