mysql行锁不能读取_mysql 行锁模拟、锁查看及排除

本文介绍了MySQL InnoDB的行锁类型,通过模拟展示了行锁的获取与死锁情况,包括更新操作被阻塞和死锁的场景。同时,提供了通过`show processlist`、`INFORMATION_SCHEMA`数据表等方法来查看锁状态,并提出了通过`INNODB_TRX`监控事务锁及使用`kill`命令解除锁的方法。
摘要由CSDN通过智能技术生成

一、mysql 行锁模拟

1、mysql锁简单说明

Mysql InnoDB行锁有2种,2者不能共存:

共享锁Shared(S) lock,用于读取行记录

互斥锁或叫排它锁Exclusive Lock (X),用于更新、删除行记录

2、先模拟一个行锁。

先用mysql命令框,开启一个事务并执行一条更新语句,但是不提交,如下:

mysql> use saas_tst;

mysql> begin;

mysql> update base_goods set sale_price = 46 where sid = 214;

然后用sqlyog客户端,依然执行上述更新语句,如下:

mysql> update base_goods set sale_price = 47 where sid = 214;

更新操作被阻塞,等很久后,会报ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction.

2、再来模拟一个死锁情况

模拟步骤:

1)用户A开启事务,read一行

mysql> begin;

mysql> select * from base_goods where sid = 214 lock in share mode;

说明: lock in share mode是为了加共享锁,其它事务仍然可以读取,如果是for update则变成互斥锁了,其它事务不能读取。<

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值