Eine Zeile atomar abrufen und aktualisieren (LCC.db.fetch_one)
Deklaration
row, err = LCC.db.fetch_one(name, opts, timeout?)
Parameter
- name
String. Tabellenname. Darf nicht leer und höchstens 256 Byte lang sein. - opts
Tabelle mit:conditions: Tabelle mit Gleichheitsfiltern (Standard{})update: Tabelle der Felder, die nach dem Übernehmen der Zeile aktualisiert werdenpick: String, optional"min"/"max"/"random"; Standard"min"; die Auswahl erfolgt anhand vonid
- timeout
Zahl, optional. Anfrage-Timeout in Sekunden, Standard60.
Rückgabewerte
- row
Tabelle. Die übernommene Zeile; bei Fehler oder ohne Treffernil. - err
String odernil. Fehlerbeschreibung;'not found', wenn keine Zeile passt, und'unknown table', wenn die Tabelle fehlt.
Hinweise
Liest und aktualisiert atomar eine einzelne Zeile – ideal für die Aufgabenvergabe bei gleichzeitigen Zugriffen.
Felder inupdatewerden sofort gespeichert, damit derselbe Datensatz nicht zweimal vergeben wird.
Auch ohneupdatewird eine Zeile atomar ausgewählt, jedoch kein Feld zurückgeschrieben.
Beispiel
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