• MYSQL锁


    前言:MySQL锁是真对客户端而言的,我们可以在客户端获取数据库中表的不同类型锁,来实现对表的锁定操作。个人理解这个锁主要限制有两点,1)限制自己,即限定自己只能对当前输定的表操作。2)限定别人,即可以限定别人查看或更新该锁定的表;

    一:语法

    LOCK TABLES
        tbl_name [[AS] alias] lock_type
        [, tbl_name [[AS] alias] lock_type] ...  //即一次可以获取多个表的锁
    
    lock_type: {
        READ [LOCAL]
      | [LOW_PRIORITY] WRITE   //锁的类型有两种,read和write
    }
    
    UNLOCK TABLES  //释放锁

    二:read锁

    2.1  限制自己 (仅支持看看当前锁定的表)

     * 不能查看别的表

     * 不能更新当前表

    mysql> LOCK TABLES TN read;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select * from COFFEES;
    ERROR 1100 (HY000): Table 'COFFEES' was not locked with LOCK TABLES
    mysql> update TN set name='sss333' where id=2;
    ERROR 1099 (HY000): Table 'TN' was locked with a READ lock and can't be updated
    View Code

    2.2 限定别人 

     * 别人也不能更新该锁定的表,例如更新操作会一直等待该表的锁释放。但不影响查看别的表

    mysql> select * from TN;  //不影响查看该表和其它表
    +----+--------+
    | id | name   |
    +----+--------+
    |  1 | qqq234 |
    |  2 | sss333 |
    |  3 | ddd    |
    +----+--------+
    3 rows in set (0.00 sec)
    
    mysql> insert into TN(id,name)value(4,'22ddd'); //影响插入
    Query OK, 1 row affected (28.94 sec)   //插入用了28.94秒(因为释放了表的锁)
    View Code

    三:write锁

    3.1 限制自己 (可查看和操作当前表)

       * 不可查看其它表或更新其它表

    mysql> lock table test write;  //锁表
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select * from user; //不可操作其他表
    ERROR 1100 (HY000): Table 'user' was not locked with LOCK TABLES
    View Code

    hasdh

  • 相关阅读:
    Maven配置--《maven实战》读书笔记
    设置定时任务
    C#中的==
    C# lock的应用
    JDK和JRE
    末尾不以.OK文件结尾的正则表达式匹配
    ftp访问空目录的返回
    正则表达式的结尾匹配
    匿名对象和匿名类
    匿名内部类的调用
  • 原文地址:https://www.cnblogs.com/jinliang374003909/p/10568274.html
Copyright © 2020-2023  润新知