本文將為您介紹PolarDB-X中自增列的相關概念和原理。

概念

PolarDB-X支持通過關鍵字AUTO_INCREMENT為列設置自增屬性,能夠自動為列填充全局唯一值。

  • INSERT語句沒有包含自增列,或者為自增列指定的值是0或NULL時,PolarDB-X會自動為該列分配一個全局唯一的值;
  • INSERT語句顯式為自增列插入值時,PolarDB-X會使用指定的顯式值,并自動跟隨插入的顯式值,使后續自動填充的值大于已插入的顯式值;
  • 在AUTO模式數據庫中,默認的自增列行為,在各方面(唯一性、單調性、連續性等)與MySQL已經一致。
說明 關于AUTO模式數據庫與DRDS模式數據庫的介紹,請參見AUTO模式數據庫與DRDS模式數據庫

原理

PolarDB-X中,如果創建表時通過AUTO_INCREMENT指定了自增列,為了保證自增列的全局唯一性,則自動為該表創建并關聯一個Sequence對象,在插入數據時使用關聯的Sequence對象分配全局唯一值并進行自動填充。

根據數據庫模式的不同,PolarDB-X在創建表時自動關聯了不同的默認Sequence類型:
  • 在AUTO模式庫中,默認關聯的是New Sequence,具備以下特性:
    • 唯一性:保證全局唯一;
    • 單調性:保證全局單調遞增;
    • 連續性:保證全局連續(沒有異常報錯或者實例重啟等情況下);
    • 兼容性:與MySQL自增列的特性很好地兼容。
  • 在DRDS模式庫中,默認關聯的是Group Sequence,具備以下特性:
    • 唯一性:保證全局唯一;
    • 單調性:在計算節點內部保證單調遞增,不保證全局單調遞增;
    • 連續性:在連接計算節點的會話和緩存區間范圍內,保證連續(沒有異常報錯或者實例重啟等情況下);
    • 兼容性:與MySQL自增列的唯一性兼容,其它特性與MySQL有所差異。

可以根據實際需求自定義想要關聯的Sequence類型,具體方法請參見關聯Sequence,不同類型的Sequence特性和適用場景,請參見概述。