MySQL如何为查询操作加锁

2025-05-24 02:42:48

1、为查询的行记录加共享锁在MySQL数据库中,锁分为两种,共享锁(S锁)和排他锁(X锁),共享锁即一条记录可以加多把该类型的锁。注意,锁必须在一个事务内部使用。图1示,通过在 se造婷用痃lect 语句后面添加 lock in share mode 即可以为结果集的所有记录添加共享锁。图2示,在一个会话中为某一条记录添加了一把共享锁,在另一个会话中,还可以为相同记录再加一把共享锁。

MySQL如何为查询操作加锁
MySQL如何为查询操作加锁

2、为查询的行记录加排他锁排他锁名如其意,一条记录只可加一把排他锁。图1示,在一个事务内,通过在 select 查询语句后面使用 for update 即可为查询获取的行记录添加排他锁。图2示,重新打开一个会话,再次尝试为相同的记录添加排他锁,操作被挂起阻塞,当前一个事务提交或等待超时后,这个操作才会继续。图3示,后面那个尝试加排他锁的事务等待超时而退出

MySQL如何为查询操作加锁
MySQL如何为查询操作加锁
MySQL如何为查询操作加锁

3、排他锁与共享锁也无法共存上一步骤演示了如何加排他锁,并且无法为同一条记录添加多个排他锁,同样,排他锁也无法和共享锁共存。图1示:在一个事务内,为一条记录添加一个排他锁。图2示:在另一个事务内,尝试为这条记录添加一个共享锁,操作被挂起图3示:将前一个事务提交图4示:后一个被阻塞的事务成功返回,为相应记录添加了共享锁

MySQL如何为查询操作加锁
MySQL如何为查询操作加锁
MySQL如何为查询操作加锁
MySQL如何为查询操作加锁

4、MySQL Innodb 存储引擎查询加锁总结1. 默认 select 操作不加锁,通过 MVCC 来实现事务的隔离2. 通过在 select 语句后面加 lock in share mode 为查询结果集添加共享锁3. 通过在 select 语句后面加 for update 为查询结果集添加排他锁

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢