mysql 分区 1526错误
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错误的更多相关文章
- Mysql 分区处理NULL的得方式
MySQL分区处理NULL值得方式 一般情况下,MySQL的分区把NULL当做零值,或者一个最小值进行处理 对于range分区 create table test_null( id int ) par ...
- mysql分区
<?php /* 分区 目录 18.1. MySQL中的分区概述 18.2. 分区类型 18.2.1. RANGE分区 18.2.2. LIST分区 18.2.3. HASH分区 18.2.4. ...
- MYSQL ERROR CODE 错误编号的意义
mysql error code(备忘) 转1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件 ...
- Mysql 分区详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt120 一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.m ...
- mysql分区方案的研究
笔者觉得,分库分表确实好的.但是,动不动搞分库分表,太麻烦了.分库分表虽然是提高数据库性能的常规办法,但是太麻烦了.所以,尝试研究mysql的分区到底如何. 之前写过一篇文章,http://www.c ...
- mysql分区表之三:MySQL分区建索引[转]
介绍 mysql分区后每个分区成了独立的文件,虽然从逻辑上还是一张表其实已经分成了多张独立的表,从“information_schema.INNODB_SYS_TABLES”系统表可以看到每个分区都存 ...
- mysql分区 详解
第18章:分区 目录 18.1. MySQL中的分区概述 18.2. 分区类型 18.2.1. RANGE分区 18.2.2. LIST分区 18.2.3. HASH分区 18.2.4. KEY分区 ...
- 第18章:MYSQL分区
第18章:分区 目录 18.1. MySQL中的分区概述 18.2. 分区类型 18.2.1. RANGE分区 18.2.2. LIST分区 18.2.3. HASH分区 18.2.4. KEY分区 ...
- mysql分区功能(三个文件储存一张表)(分区作用)(分区方式)
mysql分区功能(三个文件储存一张表)(分区作用)(分区方式) 一.总结 1.mysql数据表的存储方式(三个文件储存一张表): 一张表主要对应着三个文件,一个是frm存放表结构的,一个是myd存放 ...
随机推荐
- Codeforces 1110D Jongmah [DP]
洛谷 Codeforces 我-我我把这-这这题切了??? 说实话这题的确不难,只是我看到有大佬没做出来有点慌-- 突然发现这题是我在洛谷的第500个AC呢.那就更要写篇题解纪念一下了. 思路 容易想 ...
- linux压缩与解压(持续更新)
压缩 tar cvzf w.tar.gz xxx1 xxx2 对应解压:tar xvzf w.tar.gz
- select下拉框插件jquery.editable-select
项目中有个需求,下拉框既可以下拉选择,也可以手动填写 html代码 <span>数据来源</span> </select> js代码 $('#noMean').ed ...
- Confluence 6 Home 和其他重要的目录
Confluence 安装目录 Confluence 安装的目录(Confluence Installation directory)定义的是 Confluence 是在那里进行安装的.这个目录有时候 ...
- Confluence 6 复杂授权或性能问题
提交一个 服务器请求(support request) 然后在你的服务请求中同时提供下面的信息. Confluence 服务器 登录 Confluence 然后访问管理员控制台. 将 系统信息(Sys ...
- 修改Mysql5.7的root密码
Mysql5.7修改root密码 禁用root密码 1.修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不 ...
- 【java】转:Windows系统下面多个jdk版本切换
转自:https://blog.csdn.net/iamcaochong/article/details/56008545 1.系统-高级系统设置-环境变量 里面的Path值最前面的C:\Progra ...
- Scala-IDE构建Maven项目
本教程演示如何使用Scala-IDE构建一个Scala Maven项目. 1. 下载Scala IDE 通过以下链接下载Scala IDE: http://scala-ide.org/download ...
- iframe内容自适应高度
一直觉得要用JS才能实现iframe高度的自适应,其实CSS也可以,而且实现的更好,只是需要给包裹iframe的DIV设置个高度,然后让irame高度设置成100%就可以自适应了. 完美版Iframe ...
- cf1042d 树状数组逆序对+离散化
/* 给定一个数组,要求和小于t的段落总数 求前缀和 dp[i]表示以第i个数为结尾的小于t的段落总数,sum[i]-sum[l]<t; sum[i]-t<sum[l],所以只要找到满足条 ...