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)

如果遷移是架構的唯一事實來源,你也可以在修改資料表時指定公開的 Kotlin 型別:

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

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