施用LOCK TABLES、UNLOCK TABLES语句验证MySQL存储引擎MyISAM锁机制(一)

施用LOCK TABLES、UNLOCK TABLES语句验证MySQL存储引擎MyISAM锁机制(一)

使用LOCK TABLES、UNLOCK TABLES语句验证MySQL存储引擎MyISAM锁机制(一)

背景:

假设表T_01表创建语句如下:


create table t_01 (name varchar(31), age int) engine=myisam;

一、验证获取MyISAM表读锁后,能否对数据进行更新

1. 登录MySQL服务器,启动会话A,获取表T_01读锁


    mysql> lock tables t_01 read;

2. 同一会话继续执行插入语句


    mysql> insert into t_01(name, age) values (‘name01’, 23);

   
注:这个语句执行会抱错”ERROR 1099 (HY000): Table ‘t_01’ was locked with a READ lock and can’t be updated”

3. 启用另外的client登录MySQL服务器,启动会话B,执行插入语句


    shell> mysql -uxxx -p test


    mysql> insert into t_01(name, age) values (‘name01’, 23);

   
注:一直等待执行,游标一直闪烁;原因是被读锁阻止执行。
4. 使用会话A,执行释放锁语句


    mysql> unlock tables;

   
注:会话A释放表锁后,会话B自动获取t_01表锁,第三步中的插入语句执行成功

5. 查看记录是否插入成功

    mysql> select * from t_01;

   
注:(‘name01’, 23)这条记录插入成功

结论:
MyISAM表读锁会阻止表上其它写操作

二、验证获取MyISAM表读锁后,能否对数据进行读取

1. 登录MySQL服务器,启动会话A,获取表T_01读锁


    mysql> lock tables t_01 read;

2. 同一会话执行查询语句


    mysql> select * from t_01;

   

注:能正常显示表记录结果

3. 启用另外的client登录MySQL服务器,启动会话B,执行插入语句


    shell> select * from t_01;

   
注:能正常显示表记录结果



结论:
MyISAM表读锁不会阻止任何会话在此表上读操作

施用LOCK TABLES、UNLOCK TABLES语句验证MySQL存储引擎MyISAM锁机制(一)

相关文章:

你感兴趣的文章:

标签云: