今天主要介紹下面這幾個錯誤:
ERROR 1503 (HY000): A PRIMARY KEY must include all columns in the table's partitioning
ERROR 1503 (HY000): A UNIQUE INDEX must include all columns in the table's partitioning function
主鍵必須包括表的分區函數中的所有列,一個惟一的索引必須包括表的分區函數中的所有列,是不是不太好了解意思
其實就是這麼個意思:表上的每一個唯一性索引必須用于分區表的表達式上(其中包括主鍵索引)
下面我來舉幾個例子:
SQL
CREATE TABLE t1 (
id INT NOT NULL,
aid DATE NOT NULL,
bid INT NOT NULL,
PRIMARY KEY (id)
)
PARTITION BY KEY(bid)
PARTITIONS 10;
[Err] 1503 - A PRIMARY KEY must include all columns in the table's partitioning function
CREATE TABLE t1 (
id INT NOT NULL,
aid DATE NOT NULL,
bid INT NOT NULL,
UNIQUE KEY (id)
)
PARTITION BY KEY(bid)
PARTITIONS 10;
CREATE TABLE t1 (
id INT NOT NULL,
aid DATE NOT NULL,
bid INT NOT NULL,
PRIMARY KEY (id,bid)
)
PARTITION BY KEY(bid)
PARTITIONS 10;
Query OK, 0 rows affected (0.535 sec)
CREATE TABLE t1 (
id INT NOT NULL,
aid DATE NOT NULL,
bid INT NOT NULL,
UNIQUE KEY (id,bid)
)
PARTITION BY KEY(bid)
PARTITIONS 10;
Query OK, 0 rows affected (0.625 sec)
這一組例子說明了如果要用bid作為分區key,則bid至少要包含在主鍵或者唯一鍵。
再來看一組例子:
CREATE TABLE t1 (
id INT NOT NULL,
aid DATE NOT NULL,
bid INT NOT NULL,
PRIMARY KEY (id,aid),
UNIQUE KEY (bid)
)
PARTITION BY KEY(bid)
PARTITIONS 10;
CREATE TABLE t1 (
id INT NOT NULL,
aid DATE NOT NULL,
bid INT NOT NULL,
PRIMARY KEY (id,aid),
UNIQUE KEY (bid)
)
PARTITION BY KEY(aid)
PARTITIONS 10;
這2個分區表是無法建立的,因為沒有一個分區鍵,可以同時屬于兩個唯一性索引的鍵。
下面再來看一組例子:
CREATE TABLE t1 (
id INT NOT NULL,
aid DATE NOT NULL,
bid INT NOT NULL,
PRIMARY KEY (id,aid,bid)
)
PARTITION BY KEY(bid)
PARTITIONS 10;
Query OK, 0 rows affected (0.475 sec)
CREATE TABLE t1 (
id INT NOT NULL,
aid DATE NOT NULL,
bid INT NOT NULL,
UNIQUE KEY (id,aid,bid)
)
PARTITION BY KEY(bid)
PARTITIONS 10;
Query OK, 0 rows affected (0.532 sec)
CREATE TABLE t1 (
id INT NOT NULL,
aid DATE NOT NULL,
bid INT NOT NULL,
PRIMARY KEY (id,aid,bid),
UNIQUE KEY (bid)
)
PARTITION BY KEY(bid)
PARTITIONS 10;
Query OK, 0 rows affected (0.526 sec)
這三個都建立分區表成功了,因為bid同時屬于一個或以上的唯一性索引的鍵
通過上面這些例子,大家可以深入的了解Mysql分區中分區鍵和唯一索引主鍵的關系了,希望對大家有所幫助。