跳到主要内容

原子获取并更新一行 (LCC.db.fetch_one)

声明

row, err = LCC.db.fetch_one(name, opts, timeout?)

参数

  • name
    字符串型,表名称,必须非空且不超过 256 字节
  • opts
    表类型,包含以下字段:
    • conditions:表类型,等值筛选条件,默认 {}
    • update:表类型,获取成功后要更新的字段集合
    • pick:字符串型,可选 "min" / "max" / "random",默认 "min";基于 id 选择记录
  • timeout
    数值型,可选;请求超时时间(秒),默认 60

返回值

  • row
    表类型,领取到的行对象;失败或未命中时为 nil
  • err
    字符串型或 nil,失败时为错误描述。当未命中时返回 'not found',表不存在时返回 'unknown table'

说明

原子地读取并更新一条记录,适用于任务领取等并发场景。
update 字段会在读取后立即写回,确保同一行不会被重复分配。
不传 update 时仍会原子选取一行,只是不写回任何字段。

示例

local row, err = LCC.db.fetch_one("任务表", {
conditions = { 状态 = "空闲" },
update = { 状态 = "进行中" },
pick = "min"
})
if row then
print("领取任务", row.id, row.名称)
elseif err == "not found" then
print("暂无空闲任务")
end