PolarDB MySQL版支援分區表主鍵不包含分區鍵(UNIQUE CHECK IGNORE, 簡稱UCI)。UCI在資料庫引擎版本8.0.2.2.17及以上支援。
分區表主鍵不包含分區鍵(UCI)功能當前處於灰階發布階段。如有需求,請前往配額中心,根據配額ID
polardb_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;