MySQL中的共享锁(lock in share mode)和排它锁(for update)

本文详细介绍了MySQL中的共享锁(lock in share mode)和排它锁(for update)。共享锁允许读取但阻止修改,而排它锁不仅阻止修改,还阻止其他事务加锁。在实际操作中,会话1对数据加锁后,会话2可以快照读但无法加锁或修改。总结中指出,共享锁适用于涉及多表一致性的情况,排它锁适用于单表操作的一致性需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库中新建一张表user:

CREATE TABLE `test_user` (
  `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `name` VARCHAR(2) NOT NULL COMMENT '姓名',
  `age` INT(11) NOT NULL COMMENT '年龄',
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

往user表中插入两行数据:

INSERT INTO `test_user` (`id`,`name`,`age`) VALUES (1,'张三',23);
INSERT INTO `test_user` (`id`,`name`,`age`) VALUES (2,'李四',24);

特别说明:共享锁和排他锁均阻塞不了快照读 

1.共享锁(select ... lock in share mode)

一个事务对表中符合条件的数据行加了共享锁,这样的话其他事务可以读取(快照读)这些数据,也可以继续添加共享锁,但是无法修改这些数据直到你这个加锁的事务执行完成(否则会出现锁等待超时)。

会话1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值