如何使用uniq ganantee在Tarantool DB中获得1条记录?

问题描述

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

输入数据

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

在MSsql中,我具有以下sql代码以返回具有更新参数InUse(0> 1)的唯一记录

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

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

解决方法

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

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

如果您希望这两个查询是原子查询,则可以在事务中同时进行。要了解有关Tarantool中MVCC的更多信息,请查看以下答案:Can I yield during an transaction in Tarantool?