mysql 分区

原文:http://fyzjhh.blog.163.com/blog/static/1694442262012544429953/

参考:https://bugs.mysql.com/bug.php?id=52815

简而言之就是你建的表分区最大值不够用了

如果表有主键, 那么主键必须包含分区键,分区键是主键的子集。这个应该算是局限了。

这个是正确的

 CREATE TABLE IF NOT EXISTS `test_hash_part41` (
`id` int(11) NOT NULL ,
`pid` int(11) NOT NULL ,
`comment` varchar(1000) NOT NULL DEFAULT '' ,
`ip` varchar(25) NOT NULL DEFAULT '' ,
PRIMARY KEY (`id`,pid)
) ENGINE=INNODB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1
PARTITION BY KEY(id)
PARTITIONS 3;

下面这个会 ERROR 1503 (HY000): A PRIMARY KEY must include all columns in the table's partitioning function

CREATE TABLE IF NOT EXISTS `test_hash_part42` (
`id` int(11) NOT NULL ,
`pid` int(11) NOT NULL ,
`comment` varchar(1000) NOT NULL DEFAULT '' ,
`ip` varchar(25) NOT NULL DEFAULT '' ,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1
PARTITION BY KEY(id,pid)
PARTITIONS 3;

分区的sql语法

partition_options:
PARTITION BY
{ [LINEAR] HASH(expr)
| [LINEAR] KEY(column_list)
| RANGE(expr)
| LIST(expr) }
[PARTITIONS num]
[SUBPARTITION BY
{ [LINEAR] HASH(expr)
| [LINEAR] KEY(column_list) }
[SUBPARTITIONS num]
]
[(partition_definition [, partition_definition] ...)] partition_definition:
PARTITION partition_name
[VALUES {LESS THAN {(expr) | MAXVALUE} | IN (value_list)}]
[[STORAGE] ENGINE [=] engine_name]
[COMMENT [=] 'comment_text' ]
[DATA DIRECTORY [=] 'data_dir']
[INDEX DIRECTORY [=] 'index_dir']
[MAX_ROWS [=] max_number_of_rows]
[MIN_ROWS [=] min_number_of_rows]
[TABLESPACE [=] tablespace_name]
[NODEGROUP [=] node_group_id]
[(subpartition_definition [, subpartition_definition] ...)] subpartition_definition:
SUBPARTITION logical_name
[[STORAGE] ENGINE [=] engine_name]
[COMMENT [=] 'comment_text' ]
[DATA DIRECTORY [=] 'data_dir']
[INDEX DIRECTORY [=] 'index_dir']
[MAX_ROWS [=] max_number_of_rows]
[MIN_ROWS [=] min_number_of_rows]
[TABLESPACE [=] tablespace_name]
[NODEGROUP [=] node_group_id]
 例子:

创建range分区
CREATE TABLE  `testpartition` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`name` varchar(50) NOT NULL ,
`sex` int(1) NOT NULL DEFAULT '0' ,
PRIMARY KEY (`id`)
) ENGINE=Innodb DEFAULT CHARSET=utf8
PARTITION BY RANGE (id) (
PARTITION p0 VALUES LESS THAN (3),
PARTITION p1 VALUES LESS THAN (6),
PARTITION p2 VALUES LESS THAN (9),
PARTITION p3 VALUES LESS THAN (12),
PARTITION p4 VALUES LESS THAN MAXVALUE
);
 插入数据
 INSERT INTO testpartition (`name` ,`sex`)VALUES ('jhh', '0')
,('zhang',1),('ying',1),('aaaa',1),('bbbb',0),('test1',1),('jhh2',1)
,('jhh1',1),('test2',1),('test3',1),('test4',1),('test5',1),('jhh3',1)
,('jhh4',1),('jhh5',1),('jhh6',1),('jhh7',1),('jhh8',1),('jhh9',1)
,('jhh10',1),('jhh11',1),('jhh12',1),('jhh13',1),('jhh21',1),('jhh42',1);

 可以drop 某个分区 
alter table drop partition p4 ; 如果是删除了最大的分区p4,导致比较大的数值没有相应的分区,会报如下类似错误的。
ERROR (HY000): Table has no partition for value . 改变分区,相当于重整分区了。 需要生成临时表 ,并且加锁。
 alter table testpartition partition by RANGE(id)
(PARTITION p1 VALUES less than (6),
PARTITION p2 VALUES less than (16),
PARTITION p3 VALUES less than MAXVALUE);
Hash分区和key分区 , 只需要指定 partitions的数量。
CREATE TABLE IF NOT EXISTS `test_hash_part44` (
`id` int(11) NOT NULL ,
`pid` int(11) NOT NULL ,
`comment` varchar(1000) NOT NULL DEFAULT '' ,
`ip` varchar(25) NOT NULL DEFAULT '' ,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1
PARTITION BY KEY(id)
PARTITIONS 3;
 

mysql 分区 1526错误的更多相关文章

  1. Mysql 分区处理NULL的得方式

    MySQL分区处理NULL值得方式 一般情况下,MySQL的分区把NULL当做零值,或者一个最小值进行处理 对于range分区 create table test_null( id int ) par ...

  2. mysql分区

    <?php /* 分区 目录 18.1. MySQL中的分区概述 18.2. 分区类型 18.2.1. RANGE分区 18.2.2. LIST分区 18.2.3. HASH分区 18.2.4. ...

  3. MYSQL ERROR CODE 错误编号的意义

    mysql error code(备忘) 转1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件 ...

  4. Mysql 分区详解

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt120 一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.m ...

  5. mysql分区方案的研究

    笔者觉得,分库分表确实好的.但是,动不动搞分库分表,太麻烦了.分库分表虽然是提高数据库性能的常规办法,但是太麻烦了.所以,尝试研究mysql的分区到底如何. 之前写过一篇文章,http://www.c ...

  6. mysql分区表之三:MySQL分区建索引[转]

    介绍 mysql分区后每个分区成了独立的文件,虽然从逻辑上还是一张表其实已经分成了多张独立的表,从“information_schema.INNODB_SYS_TABLES”系统表可以看到每个分区都存 ...

  7. mysql分区 详解

    第18章:分区 目录 18.1. MySQL中的分区概述 18.2. 分区类型 18.2.1. RANGE分区 18.2.2. LIST分区 18.2.3. HASH分区 18.2.4. KEY分区 ...

  8. 第18章:MYSQL分区

    第18章:分区 目录 18.1. MySQL中的分区概述 18.2. 分区类型 18.2.1. RANGE分区 18.2.2. LIST分区 18.2.3. HASH分区 18.2.4. KEY分区 ...

  9. mysql分区功能(三个文件储存一张表)(分区作用)(分区方式)

    mysql分区功能(三个文件储存一张表)(分区作用)(分区方式) 一.总结 1.mysql数据表的存储方式(三个文件储存一张表): 一张表主要对应着三个文件,一个是frm存放表结构的,一个是myd存放 ...

随机推荐

  1. noj算法 装载问题 回溯法

    描述: 有两艘船,载重量分别是c1. c2,n个集装箱,重量是wi (i=1…n),且所有集装箱的总重量不超过c1+c2.确定是否有可能将所有集装箱全部装入两艘船. 输入: 多个测例,每个测例的输入占 ...

  2. Url解码和编码 escape()、encodeURI()、encodeURIComponent()区别详解

    Server.UrlDecode;解码 Server.UrlEncode;编码 url编码是一种浏览器用来打包表单输入的格式.浏览器从表单中获取所有的name和其中的值 ,将它们以name/value ...

  3. Confluence 6 企业环境或者网站托管的 Java 配置策略

    Confluence 需要依赖一些 Java 的库才能够允运行.一些依赖的 Java 库应用了 Java 的语言特性,但是又是被 Java 的安全策略所限制的. 这个通常来说是不会造成任何问题的.默认 ...

  4. mybatis常见错误总结

    1. 现象:mybatis xml文件中查询的返回类型写成list或java.util.List时,执行sql时报 java.lang.UnsupportedOperationException错误. ...

  5. babel-cli 的使用

    1.安装babel-cli npm i babel-cli -D 2.实现npm的初始化 npm init -y 3.配置package.json { "name": " ...

  6. java函数式编程之Supplier

    原创 2016年12月25日 10:02:52 标签: 函数式编程 / java 3250 描述:Supplier< T>接口没有入参,返回一个T类型的对象,类似工厂方法. 源码: pub ...

  7. txt文档去重复内容

    @echo off for /f "delims=" %%i in ('type "%1"') do (if not defined %%i set %%i=A ...

  8. 论文阅读笔记十六:DeconvNet:Learning Deconvolution Network for Semantic Segmentation(ICCV2015)

    论文源址:https://arxiv.org/abs/1505.04366 tensorflow代码:https://github.com/fabianbormann/Tensorflow-Decon ...

  9. Python enumerate() 函数

    描述 enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中. Python 2.3. 以上版本可用,2. ...

  10. python编程实现十进制的转换(十进制到任何进制不用系统函数实现)

    # 用户给定一个十进制数据,以及进制n, 完成n进制的转换,输出结果给用户(不要借助已有函数) # 用户的输入进制数据Decdata = int(input("请输入一个十进制数据:&quo ...