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

posted @ 2019-03-20 22:32  爱我-中华  阅读(121)  评论(0编辑  收藏  举报