MySQL之锁定语句

  • Post author:
  • Post category:mysql




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 取消全部的锁


以上纯属个人见解,如有问题请联本人!



版权声明:本文为weixin_45492007原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。