以不可分割方式取得並更新一筆資料列 (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