全部產品
Search
文件中心

PolarDB:UNIQUE CHECK IGNORE

更新時間:Jul 17, 2026

PolarDB MySQL版支援分區表主鍵不包含分區鍵(UNIQUE CHECK IGNORE,簡稱UCI)。

適用範圍

核心版本需滿足以下條件:

  • MySQL 8.0.1,且修訂版本需為8.0.1.1.46及以上。

  • MySQL 8.0.2,且修訂版本需為8.0.2.2.26及以上。

您可以通過查詢版本號碼,來確認叢集版本。

參數說明

參數名

層級

參數說明

loose_polar_allow_unique_check_ignore

Global

用於控制分區表的主鍵或唯一鍵是否必須包含分區鍵欄位(即主鍵、唯一鍵與分區鍵解除綁定)。取值如下:

  • ON:允許建立主鍵或唯一鍵不包含分區鍵欄位的分區表。

  • OFF(預設):禁止建立主鍵或唯一鍵不包含分區鍵欄位的分區表。

修改後無需重啟即可生效。

文法

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;