sql - 如何使用 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 中重复这个?
解决方案
在 Tarantool 中,您可以使用box.execute()执行 SQL 语句。Tarantool 中使用的 SQL 方言派生自 SQLite,因此支持示例中的子查询。
不幸的是,不支持 OUTPUT 子句。您必须将查询拆分为 UPDATE 和 SELECT。由于这一切都在内存中,因此开销不会很明显。
如果您希望这两个查询是原子的,您可以在事务中执行它们。要了解有关 Tarantool 中 MVCC 的更多信息,请查看以下答案:我可以在 Tarantool 中的交易期间产生收益吗?.
推荐阅读
- java - 如何在一个类中从 Scanner 获取用户输入,然后将其应用于同一包中的另一个类?
- javascript - .reduce 在这种情况下如何与递归函数一起工作?
- java - 尝试使用另一个类中的对象调用用户定义的类时找不到符号错误
- javascript - 稍后通过 Javascript 添加的元素上的 Javascript 执行失败
- javascript - 设置具有值的特定单元格以使用谷歌脚本一一触发
- node.js - findOneandUpdate mongoose
- java - c 中有什么类似于 Reflection API 和注释在 java 中的吗?
- r - 在 for 循环中的第一个空列中添加值
- django - 我应该为来自 React 的所见即所得数据使用什么 Django 模型字段?
- c - 为什么 int i = 2; printf("%d%d%d",i*=2,++i,i++) 输出 882