mysql 锁测试_mysql锁 实战测试代码

存储引擎

支持的锁定

MyISAM

表级锁

MEMORY

表级锁

InnoDB

行级锁

BDB

页面锁

表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

锁定方式

执行锁定的线程 读

其他线程 读

执行锁定的线程 写

其他线程 写

读锁

可读

可读

不可写

不可写

写锁

可读

不可读

可写

不可写

涉及工具:Navicat和SQLyog(不能使用phpMyAdmin)

测试代码

测试一:读锁。说明:自己与其他线程只能读取该表

在Navicat中执行以下代码

mysql> lock table `cat` READ;

Query OK, 0 rows affected

mysql> SELECT * FROM `cat` WHERE 1;

+----+--------+

| id | remark |

+----+--------+

| 1 | ceshi |

| 2 | 22222 |

| 3 | 33333 |

+----+--------+

3 rows in set

mysql> UPDATE `cat` SET remark= 'Navicat' WHERE id=1;

1099 - Table 'cat' was locked with a READ lock and can't be updated

在SQLyog中执行

mysql> SELECT * FROM `cat` WHERE 1;

+----+--------+

| id | remark |

+----+--------+

| 1 | ceshi |

| 2 | 22222 |

| 3 | 33333 |

+----+--------+

3 rows in set

mysql> UPDATE `cat` SET remark= 'SQLyog' WHERE id=1

SQLyog执行UPDATE时,一直都是执行中。当解锁时,执行成功。

在Navicat中执行解锁操作

mysql> unlock tables;

执行后,SQLyog的UPDATE执行成功。

测试结果:

当进行读锁时,锁定线程可进行查询操作,不可进行写入操作。其他线程可进行查询操作,不可进行写入操作。

测试一:写锁。说明:只有当前线程能够对表进行写入操作(其他线程也无法读这部分数据)

在Navicat中执行以下代码

mysql> LOCK TABLE cat WRITE;

Query OK, 0 rows affected

mysql> select * from `cat` where 1;

+----+--------+

| id | remark |

+----+--------+

| 1 | SQLyog |

| 2 | 22222 |

| 3 | 33333 |

+----+--------+

3 rows in set

mysql> update `cat` set remark= 'Navicat' where id=1;

Query OK, 1 row affected

Rows matched: 1 Changed: 1 Warnings: 0

然后在SQLyog中执行

mysql> select * from `cat` where 1;

mysql> update `cat` set remark= 'Navicat' where id=1;

可见都是一直是执行状态。只有解锁后,SQLyog才能执行成功

在Navicat中执行解锁操作

mysql> unlock tables;

SQLyog执行成功。

测试结果:

写锁后,执行写锁的线程可进行读和写,其他线程不可进行读和写

参考资料:

https://blog..net/five3/article/details/78623608?locationNum=3&fps=1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值