select...for update使用的什么锁呢?

欢喜 Java每日一问 发布时间:2025-06-13 15:27:16 阅读数:1654 1
下文笔者讲述"select...for update"相关锁说明,如下所示

锁简介

`SELECT ... FOR UPDATE` 
  使用
    是排他锁(Exclusive Lock)
	 也称为 写锁(X-Lock)

锁类型说明

锁类型 说明
共享锁(Shared Lock, S-Lock) 允许多个事务读取同一资源,但阻止其他事务获取排他锁
适用于 `SELECT ... LOCK IN SHARE MODE`
排他锁(Exclusive Lock, X-Lock) 阻止其他事务读写该资源,确保当前事务独占访问
适用于 `SELECT ... FOR UPDATE`

行为特点

- 当一个事务执行了 `SELECT ... FOR UPDATE`:
  - 它会对选中的记录加上 "排他锁**。
  - 其他事务不能修改这些记录(如 [UPDATE]),
也不能对其加锁(包括 `SELECT ... FOR UPDATE` 和 `SELECT ... LOCK IN SHARE MODE`) - 直到当前事务提交或回滚后,锁才会释放。

使用场景

  高并发下保证数据一致性:
如库存扣减、订单创建等需要防止并发修改的业务逻辑 避免脏读和不可重复读:
在可重复读(RR)隔离级别下可以防止这类问题

注意事项

	死锁风险:
多个事务交叉请求锁时可能引发死锁,需合理设计事务顺序。 锁粒度:
根据查询条件是否命中索引,MySQL 可能使用行锁或表锁。 - 如果命中索引:使用 行级锁 。 - 如果未命中或全表扫描:可能升级为 表级锁 。 事务提交后释放锁**:务必注意事务的边界,避免长事务占用锁资源。
START TRANSACTION;
SELECT * FROM orders WHERE order_id = 1001 FOR UPDATE;
-- 此时其他事务无法修改 order_id=1001 的记录
UPDATE orders SET status = 'processing' WHERE order_id = 1001;
COMMIT;
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaProblem/202506/8495.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者