全部產品
Search
文件中心

PolarDB:UNIQUE CHECK IGNORE

更新時間:Jul 23, 2024

PolarDB MySQL版支援分區表主鍵不包含分區鍵(UNIQUE CHECK IGNORE, 簡稱UCI)。UCI在資料庫引擎版本8.0.2.2.17及以上支援。

說明
  • 分區表主鍵不包含分區鍵(UCI)功能當前處於灰階發布階段。如有需求,請前往配額中心,根據配額IDpolardb_mysql_uci找到配額名稱,在對應的操作列單擊申請來開通該功能。

  • 如需瞭解更多關於主鍵不包含分區鍵(UCI)的內容,請搜尋DingTalk群號加群進行諮詢。DingTalk群號:24490017825。

文法

UCI是PolarDB建立表table_options的一個屬性。建立表時指定UNIQUE CHECK IGNORE=1表示該表忽略分區鍵的唯一性檢查,不再考慮分區鍵與主鍵和唯一鍵的關係,可以選擇任意列做分區鍵。文法如下:

CREATE TABLE [ schema. ]table_name
 table_definition table_options
   PARTITION BY ...
   SUBPARTITION BY ...

其中,table_options中增加了一個選項UNIQUE CHECK IGNORE = { 1| 0 }UNIQUE CHECK IGNORE=1表示主鍵和唯一鍵不需要必須包含分區鍵的所有列,使得分區鍵的選擇更加靈活。但是無法保證資料主鍵和唯一鍵在分區間的唯一性,也就是主鍵和唯一鍵的唯一性僅在分區內部有效,在分區間不做限制。

說明
  • 表屬性UNIQUE CHECK IGNORE只能用於分區表,普通的非分區表添加此屬性會報錯。

  • 表屬性UNIQUE CHECK IGNORE為唯讀屬性,您不能修改UNIQUE CHECK IGNORE屬性的值。

  • UCI分區表無法保證主鍵的唯一性。以確保主鍵的唯一性,必須建立主鍵欄位的唯一全域二級索引(GSI)。否則,不同的分區允許出現重複的主鍵欄位值。具體操作請參見樣本二

  • UCI分區表無法保證不包含分區鍵的唯一索引的唯一性,建議建立成唯一全域二級索引(GSI)

參數

參數名稱

參數說明

table_name

要建立的表名稱。

樣本

樣本一

CREATE TABLE t1(
        a INT PRIMARY KEY,
        b INT UNIQUE,
        c INT
    ) UNIQUE CHECK IGNORE=1
    PARTITION BY RANGE(c) (
            PARTITION p0 VALUES LESS THAN (20) ,
            PARTITION p1 VALUES LESS THAN (40) ,
            PARTITION p2 VALUES LESS THAN (60)
    );

樣本二

// 唯一全域二級索引保證主鍵唯一性
CREATE TABLE t1(
        a INT PRIMARY KEY,
        b INT UNIQUE,
        c INT,
        UNIQUE KEY i_a_g(a) GLOBAL
    ) UNIQUE CHECK IGNORE=1
    PARTITION BY HASH(c) PARTITIONS 11;