欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/
本文通过具体示例介绍如何使用 SELECT FOR UPDATE
锁定查询结果。
SELECT FOR UPDATE
OceanBase 数据库支持多版本并发控制 MVCC。默认情况下,读事务不会阻塞写事务的执行,但可以通过 SELECT ... FOR UPDATE 的方式为读事务的对象加锁,从而达到阻塞写事务的目的。
示例
创建示例表并录入合适的数据。
obclient> CREATE TABLE fruit_order( order_id INT NOT NULL AUTO_INCREMENT COMMENT '订单ID', user_id BIGINT NOT NULL COMMENT '客户ID', user_name VARCHAR(16) NOT NULL DEFAULT '' COMMENT '客户名称', fruit_price DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '订单金额', order_year SMALLINT NOT NULL COMMENT '下单年份', PRIMARY KEY (order_id) ) COMMENT '订单表'; Query OK, 0 rows affected obclient>INSERT INTO fruit_order(order_id,user_id,user_name,fruit_price,order_year) VALUES (1,1011,'张三',13.11,'2019'), (4,1011,'张三',22.21,'2020'), (6,1011,'张三',58.83,'2020'), (2,1022,'李四',23.34,'2019'), (3,1022,'李四',12.22,'2019'), (7,1022,'李四',14.66,'2021'), (8,1022,'李四',34.44,'2021'), (5,1033,'王五',51.55,'2020'), (9,1033,'王五',63.66,'2021'); Query OK, 9 rows affected Records: 9 Duplicates: 0 Warnings: 0
复制
使用 SELECT FOR UPDATE 锁定查询结果
obclient> SELECT user_name, fruit_price, order_year FROM fruit_order WHERE order_id = 7 FOR UPDATE; +-----------+-------------+------------+ | user_name | fruit_price | order_year | +-----------+-------------+------------+ | 李四 | 16.52 | 2021 | +-----------+-------------+------------+ 1 row in set /*在会话 2 中执行如下语句,该 SQL 语句会等待,直到上面的事务回滚或者 COMMIT 才得到执行*/ obclient> SELECT user_name, fruit_price, order_year FROM fruit_order WHERE order_id = 7 FOR UPDATE; ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction /*在会话 1 中执行如下语句:*/ obclient> commit; Query OK, 0 rows affected /*在会话 2 中再次执行如下语句:*/ obclient> UPDATE fruit_order SET fruit_price = 16.5 WHERE order_id = 7; Query OK, 0 rows affected Rows matched: 1 Changed: 0 Warnings: 0 /*在会话 1 中查询更新后的数据*/ obclient> SELECT user_name, fruit_price, order_year FROM fruit_order WHERE order_id = 7 FOR UPDATE; +-----------+-------------+------------+ | user_name | fruit_price | order_year | +-----------+-------------+------------+ | 李四 | 16.5 | 2021 | +-----------+-------------+------------+ 1 row in set
复制
欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
2025年4月国产数据库大事记:4个千万级中标项目诞生!2024年达梦净利3.6亿、金仓净利8006.6万……
墨天轮编辑部
2279次阅读
2025-04-30 17:39:54
2025年5月中国数据库流行度排行榜:OB一枝独秀破 800,金仓奋起直追跻四强
墨天轮编辑部
1055次阅读
2025-05-13 10:55:54
2025年4月国产数据库中标情况一览:4个千万元级项目,GaussDB与OceanBase大放异彩!
通讯员
793次阅读
2025-04-30 15:24:06
MogDB 发布更新,解决 openGauss 数据库在长事务情况下Ustore表膨胀问题
MogDB
309次阅读
2025-04-17 10:41:41
919万!南航信息中心采购OceanBase数据库软件许可及服务
通讯员
292次阅读
2025-04-29 16:13:34
AI关键场景得到全面支持!OceanBase入选Forrester报告三大领域代表厂商
OceanBase数据库
264次阅读
2025-04-19 22:27:54
QPlus V6.3 更新,新增PostgreSQL与PolarDB PG支持,OceanBase 容灾管理重磅上线
沃趣科技
257次阅读
2025-05-13 09:39:27
1364万!2024年中国联通软研院OceanBase扩容单一来源采购公示
通讯员
186次阅读
2025-04-21 15:55:59
Oceanbase单机版上手示例
潇湘秦
183次阅读
2025-04-18 13:40:24
OceanBase创始人阳振坤荣誉退休!曾从0到1发起自研国产分布式数据库,攻克了分布式数据库的核心技术壁垒
通讯员
152次阅读
2025-05-13 14:10:49
热门文章
OceanBase 社区版入门教程第九期 如何快速拿下 OBCA & OBCP 认证
2022-09-27 6161浏览
实战教程第四章4.6:如何使用 DataX 加载 CSV 数据文件到 OceanBase
2022-09-28 2534浏览
从Oracle、MySQL到OceanBase的入门介绍,看这篇就够了!
2022-10-17 2490浏览
产品模块原理系列 | OceanBase总控服务到底是啥?一文详解RootService总控服务
2022-10-19 2341浏览
OceanBase备份恢复
2022-10-12 2282浏览
最新文章
TuGraph(OceanBase图数据库)小课堂010:TuGraph-DataX-Tool 如何使用?
2023-05-15 674浏览
TuGraph(OceanBase图数据库)小课堂009:TuGraph Browser 用户如何使用?
2023-05-15 812浏览
TuGraph(OceanBase图数据库)小课堂009:tugraph_cypher 如何使用?
2023-05-15 502浏览
TuGraph(OceanBase图数据库)小课堂008:TuGraph服务如何运维?
2023-05-15 527浏览
TuGraph(OceanBase图数据库)小课堂007:TuGraph如何配置服务?
2023-05-15 465浏览