zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    玩聚网和百度新闻的技术差异性
    拿下“[warn] (OS 64)指定的网络名不再可用”错误
    转型要回答的四个问题和一根筋变形Push法
    奇虎之奇酷改版为热点memeTracker之分析
    新媒体的运营之道【三】
    疑似BUG:Python SGMLParser处理html中的javascript失当
    智能语义参透股票 小公司不见得比输大公司
    新SNS的创立和运营之道[360圈座谈]
    在路上:语义和创业
    论Push!
  • 原文地址:https://www.cnblogs.com/jinliang374003909/p/10568274.html
Copyright © 2011-2022 走看看