PolarDB MySQL版支援分區表主鍵不包含分區鍵(UNIQUE CHECK IGNORE,簡稱UCI)。
適用範圍
核心版本需滿足以下條件:
MySQL 8.0.1,且修訂版本需為8.0.1.1.46及以上。
MySQL 8.0.2,且修訂版本需為8.0.2.2.26及以上。
您可以通過查詢版本號碼,來確認叢集版本。
參數說明
參數名 | 層級 | 參數說明 |
| Global | 用於控制分區表的主鍵或唯一鍵是否必須包含分區鍵欄位(即主鍵、唯一鍵與分區鍵解除綁定)。取值如下:
修改後無需重啟即可生效。 |
文法
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;