原子获取并更新一行 (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