首页 > 解决方案 > 如何使用 uniq ganantee 在 Tarantool DB 中获取 1 条记录?

问题描述

我在数据库 my_table_ext 中有表 [ID, CITY_ID, CTN, EXT, InUse]

有数据在

{1,'City1','001','1234',0}
{2,'City1','001','3456',0}

在 MSSQL 中,我有这个 SQL 代码使用更新参数 InUse ( 0 >1 ) 返回唯一记录

  update A set A.InUse=1 
    output inserted.ID,inserted.CTN,inserted.EXT
     into @ext (EXT_ID,CTN,EXT)
    from
     (select top 1 ID,CTN,EXT,InUse from
       my_table_ext with(readpast)
       where CITY_ID=@city_id  and InUse=0
       ) A
    where ID=A.ID

问题是 - 如何在 Lua/Tarantool 中重复这个?

标签: sqlluatarantool

解决方案


在 Tarantool 中,您可以使用box.execute()执行 SQL 语句。Tarantool 中使用的 SQL 方言派生自 SQLite,因此支持示例中的子查询。

不幸的是,不支持 OUTPUT 子句。您必须将查询拆分为 UPDATE 和 SELECT。由于这一切都在内存中,因此开销不会很明显。

如果您希望这两个查询是原子的,您可以在事务中执行它们。要了解有关 Tarantool 中 MVCC 的更多信息,请查看以下答案:我可以在 Tarantool 中的交易期间产生收益吗?.


推荐阅读