Skip to content

낙관적 잠금 (Optimistic Locking)

컬럼을 LOCK으로 지정하면, 해당 컬럼에 대해 값 타입이 생성되며, UPDATE 문이 업데이트를 수행할 때 해당 잠금을 올바르게 사용해야 합니다.

sql
CREATE TABLE hockeyPlayer(
  id INT AS VALUE,
  version_number INT AS LOCK,
  name VARCHAR(8)
);

-- 이 문장은 실패합니다 (IDE 플러그인이 아래와 같이 다시 작성할 것을 권장합니다)
updateName:
UPDATE hockeyPlayer
SET name = ?;

-- 이 문장은 컴파일에 성공합니다
updateNamePassing:
UPDATE hockeyPlayer
SET name = ?
    version_number = :version_number + 1
WHERE version_number = :version_number;

마이그레이션에서의 커스텀 타입 (Custom Types in Migrations)

마이그레이션이 스키마의 소스(source of truth)인 경우, 테이블을 변경(alter)할 때 노출될 Kotlin 타입을 지정할 수도 있습니다:

sql
import kotlin.String;
import kotlin.collection.List;

ALTER TABLE my_table
  ADD COLUMN new_column VARCHAR(8) AS List<String>;