mysql分区唯一索引失效_[项目踩坑] MySQL 分区:分区键和唯一索引主键的关系,解决报错 A PRIMARY KEY...
场景
【项目踩坑】Mysql分区:分区键和唯一索引主键的关系,解决报错 A PRIMARY KEY must include all columns in the table’s partitioning
今天在建立mysql 分区表,设置主键与索引时候报错
错误:
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
结论
主键必须包括表的分区函数中的所有列,一个惟一的索引必须包括表的分区函数中的所有列,是不是不太好理解意思?分区的key必须是 主键!
那就来看看分析
分析1
其实就是这么个意思:表上的每一个唯一性索引必须用于分区表的表达式上(其中包括主键索引)
下面我来举几个例子:
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
SQL
CREATE TABLE t1 (
id INT NOT NULL,
aid DATE NOT NULL,
bid INT NOT NULL,
UNIQUE KEY (id)
)
PARTITION BY KEY(bid)
PARTITIONS 10;
[Err] 1503 - A PRIMARY KEY 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,bid)
)
PARTITION BY KEY(bid)
PARTITIONS 10;
Query OK, 0 rows affected (0.535 sec)
SQL
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)
结果1
这一组例子说明了如果要用bid作为分区key,则bid至少要包含在主键或者唯一键。
分析2
再来看一组例子:
SQL
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;
[Err] 1503 - A PRIMARY KEY 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,aid),
UNIQUE KEY (bid)
)
PARTITION BY KEY(aid)
PARTITIONS 10;
[Err] 1503 - A PRIMARY KEY must include all columns in the table’s partitioning function
结果2
这2个分区表是无法建立的,因为没有一个分区键,可以同时属于两个唯一性索引的键。
分析3
下面再来看一组例子:
SQL
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)
SQL
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)
SQL
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)
结果3
这三个都建立分区表成功了,因为bid同时属于一个或以上的唯一性索引的键
最后
通过上面这些例子,大家可以深入的理解Mysql分区中分区键和唯一索引主键的关系了,
主要是,分区的key必须是 主键!
防爬虫说明
禁止 学习某地爬虫,知乎爬虫,CSDN 爬虫。
本文,首发在 learnku 社区。
本作品采用《CC 协议》,转载必须注明作者和本文链接
感谢关注
上海PHP自学中心-免费编程视频教学|
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)