TDSQL-C MySQL 版 支持 NOWAIT 语法

这篇说说TDSQL-C MySQL版DDL支持NO_WAIT和WAIT选项,以及SELECT FOR UPDATE支持NOWAIT和SKIP LOCKED选项,用于控制锁等待行为。 DDL支持WAIT设置等待MDL LOCK秒数,超时或指定NO_WAIT则直接返回。 SELECT FOR UPDATE支持NOWAIT报错和SKIP LOCKED跳过已锁行,适用于秒杀等场景。 注意DDL的NO_WAIT与SELECT 。

相关产品
TDSQL-C MySQL 版 产品页,含版本规格、价格与购买入口。

一、功能介绍

·DDL 支持 NO_WAIT 和 WAIT 选项。对于 DDL 操作,可通过 WAIT 设置等待 MDL LOCK 的秒数,如果在设定时间内未能获取到 MDL LOCK 则直接返回,也可指定 NO_WAIT 选项,未能获取到 MDL LOCK 直接返回。

·SELECT FOR UPDATE 支持 NOWAIT 和 SKIP LOCKED 选项。在原有的 SELECT FOR UPDATE 逻辑下,如果目标行数据被另一个事务加了锁,则需要等待该事务释放锁,但在某些场景中,如秒杀,并不希望等待锁,通过 SKIP LOCKED 和 NOWAIT 选项提供一种不需要等待锁的功能。SKIP LOCKED 语句会跳过已经被加锁的行,这些行不会出现在结果集中;NOWAIT 语句遇到被加锁的行不会等待,同时会报错。

需要注意的是这两种 NO WAIT 使用的关键字是不一样的。

二、支持版本

·内核版本 TDSQL-C MySQL 版 5.7 2.0.23/2.1.9 及以上。

·内核版本 TDSQL-C MySQL 版 8.0 3.1.10 及以上。

三、适用场景

DevAPI/XPlugin 暂不支持 SELECT FOR UPDATE/SHARE 语句中使用 SKIP LOCKED 和 NOWAIT 选项。由于历史原因,DDL 的 NO_WAIT 关键字和 SELECT FOR UPDATE 的 NOWAIT 关键字是两个不同的关键字,需要注意区分。

赞 (0)
上一篇 4天前
下一篇 4天前