한 행을 원자적으로 가져와 업데이트 (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