1.锁定语句
MySQL支持对
MyISAM和MEMORY存储引擎
的表
进行表级锁定
,对
BDB存储引擎
的表进行
页级锁定
,
对INNODB存储引擎
的表进行
行级锁定
。
默认情况下,表锁和行锁都是自动获得,不需要额外的命令,但是在有的情况下,用户需要明确的进行锁表或者进行事务的控制,以便确保整个事务的完整性。
MySQL中的锁就相当于Java线程中的锁,当一个表被添加锁时,其他要获得这个锁的线程需要等待解锁才能操作
2.创建锁的语法
3.解锁的语法
4.例子
mytest表
my_log表
1.为表mytest添加read锁
LOCK TABLE test.`mytest` READ;
2.执行查看mytest表操作
SELECT * FROM test.`mytest`;
没有报错,正确显式
3.执行查看其他表操作
SELECT * FROM test.`my_log`;
错误,不能查询!
4.执行修改mytest表操作
DELETE FROM test.`mytest` WHERE id=7;
-- 或者执行
UPDATE test.`mytest` SET money=1000 WHERE id=7;
都出现这个错误
5.执行向其他表my_log中插入数据操作
insert into my_log(note) values('锁定mytest 的read 操作,能像其他表种添加数据吗?')
不能执行向其他表插入数据操作。
6.执行解锁后执行任何操作都可以成功!
5.总结
1.在使用锁定语句的时候可以锁定当前表,可以添加
read锁和write锁
2.只要添加了锁,就表示其他线程获取的时候需要等待加锁线程解锁才可以操作。
3.read锁的添加会导致
只允许读取加锁的表
,
只能对当前表执行查询操作
,
不允许对表添加和修改操作
,
也不能对其他表执行任何操作(包括读也不行)
4.可以通过unlock tables 取消全部的锁
以上纯属个人见解,如有问题请联本人!