前言: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
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秒(因为释放了表的锁)
三: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
hasdh