使用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表读锁不会阻止任何会话在此表上读操作


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值