场景

【项目踩坑】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自学中心-免费编程视频教学|

mysql分区唯一索引_[项目踩坑] MySQL 分区:分区键和唯一索引主键的关系,解决报错 A PRIMARY KEY...相关推荐

  1. Mysql是国产化么_项目国产化,mysql替换为神通数据库记录

    1.背景 项目中mysql数据库要替换成神通数据库:库中的表有部分是内置数据,即项目安装部署后库.表要已经创建完成,并且部分表里要有内置数据,项目启动要能根据实体类动态更新表结构(为了方便升级.运维) ...

  2. 【踩坑】遇到 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 报错...

    今天在重做 iblog 客户端时,测试接口情况,发现了 org.apache.ibatis.binding.BindingException: Invalid bound statement (not ...

  3. 警惕参数变化,MySQL 8.0 升级避免再次踩坑

    MySQL 8.0新特性专栏目录 <MySQL开发规范>过时了,视图查询性能提升了一万倍 你真的会用EXPLAIN么,SQL性能优化王者晋级之路 索引三剑客之降序索引和不可见索引 千呼万唤 ...

  4. Mysql数据唯一约束与唯一索引案例总结及踩坑记(含NULL值与唯一约束唯一索引的搭配使用)

    Mysql数据唯一索引与唯一约束案例总结 唯一约束的说明 唯一约束是约束(CONSTRAINT)里的一种,常见的还有主键.外检.默认值.是否为空.检查等.唯一约束即限制某个或某些字段具有唯一性(不能重 ...

  5. html2canvas图片的文字偏移,html2canvas在Vue项目踩坑-生成图片偏移不完整

    背景 最近做一个Vue项目需求是用户长按保存图片,页面的数据是根据不同id动态生成的,页面渲染完生成内容图片让用户长按保存的时候,把整个页面都保存起来. 在项目遇到的坑是图片能生成,可是生成的图片总是 ...

  6. java 做项目踩坑,web项目踩坑过程

    sql函数设计: 一开始本来是直接用Java的jdbc直接传输操作语句的.但后来学了存储过程发现存储过程可以提高不少的效率.就重构了自己对数据库的操作代码.包括:开启,查找,修改,关闭. 开启:直接使 ...

  7. 配合Opencv2.4.9,CMake3.12.1和VS2010在win10下构建项目踩坑记录

    配合Opencv3,CMake和VS2010在win10下构建项目踩坑记录 参考https://blog.csdn.net/qq_26623659/article/details/78322782 博 ...

  8. mysql修改工资字段_基于Linux的MySQL操作实例(修改表结构,MySQL索引,MySQL数据引擎)...

    基于Linux的MySQL操作实例(修改表结构,MySQL索引,MySQL数据引擎) 前言 本篇是基于Linux下针对MySQL表结构的修改,MySQL索引的操作以及MySQL数据引擎的配置和说明. ...

  9. 丰田项目踩坑手记(REACT)

    丰田项目踩坑手记(REACT) 路由配置的时候:要引入hash路由不是browswer那个 路由参考网址:react-guide.github.io/react-route- 路由网址:reacttr ...

  10. mysql的引双向链表_一分钟掌握MySQL的InnoDB引擎B+树索引

    MySQL的InnoDB索引结构采用B+树,B+树什么概念呢,二叉树大家都知道,我们都清楚随着叶子结点的不断增加,二叉树的高度不断增加,查找某一个节点耗时就会增加,性能就会不断降低,B+树就是解决这个 ...

最新文章

  1. 手把手教你代码重构,是时候告别屎一样的代码了!
  2. 什么是超融合数据中心网络?
  3. Thymeleaf –片段和angularjs路由器局部视图
  4. mysql 优化关键字_MySQL 优化之 EXPLAIN 关键字
  5. c++之对vector排序并获得其索引
  6. LeetCode-108将有序数组转换为二叉搜索树
  7. 问答知识图谱还缺少什么信息?
  8. Python学习之路_day_11(装饰器)
  9. 数据库与REDIS缓存数据一致性解决方案
  10. 基于MAE的人脸素描图像属性识别和分类
  11. 新兴职业背后的认知逻辑
  12. 国产海洋地球物理设备简述----侧扫声纳
  13. 2023最近很火的抖音解封技术教程分析+价值1000+
  14. 2021-2027全球与中国智能办公室系统市场现状及未来发展趋势
  15. mybatis 中 if-test 判断详解
  16. 彩信SMIL文件学习
  17. python+selenium实现UI自动化(一)
  18. 用计算机弹最简单的歌,计算器也能演奏美妙音乐
  19. 字节跳动大数据岗位面经(一面、二面、三面、hr面,base南京)
  20. S7-1200通过Modbus/485通讯INVT变频器(小白篇)

热门文章

  1. 从shell(终端)中退出python
  2. 【TeeChart .NET教程】(六)使用系列
  3. Codeforces Round #387 (Div. 2) 747E
  4. ES6的Set()方法实现数组去重
  5. 正则表达式,小于等于180且大于等于0的浮点型
  6. 主流搜索引擎博客提交地址
  7. 动态生成WizardPage
  8. 【教育知识与能力】人物总结
  9. Android Key Hash的生成
  10. js数组再倒数第二个添加元素_js 循环对象数组将元素逐个添加至新数组问题