2022年01月16日整理发布:mysql添加分区出错怎么办

2023-08-03 12:11:19 来源:互联网

关系型数据库添加分区出错报"1503"错误的原因:每一个分区表中的公式中的列必须在主键"唯一密钥"中包括否则就报错;解决方法:先使用"主键"关键字创建一个复合主键将分区字段加入到主键中再进行分区操作。

(推荐教程:mysql视频教程)

如果分区字段没有包含在主键字段内如表A的主键为身份证,分区字段为创建时间按时间范围分区代码如下:


(资料图片)

创建表T1(

id int(8)不为空自动增量,

创建时间日期时间不为空,

主键(标识)

)ENGINE=InnoDB AUTO _ INCREMENT=1 DEFAULT CHARSET=ut F8

按范围划分(截止日(创建时间))

分区p0蛋白值小于(至_天(" 2010-04-15 ")),

分区第一亲代值小于(至_天(" 2010-05-01 ")),

分区p2值小于(至_天(" 2010-05-15 ")),

分区p3值小于(至_天(" 2010-05-31 ")),

分区p4值小于(截止日期(" 2010-06-15 ")),

分区p19值小于最大值);错误提示:#1503

主键必须包含表的分区函数中的所有列主键的限制每一个分区表中的公式中的列必须在主键"唯一密钥"中包括

在关系型数据库的官方文档里是这么说明的

18.5.1.分区键、主键和唯一键

本节讨论分区键与主键和唯一键的关系。控制这种关系的规则可以表示如下3360分区表的分区表达式中使用的所有列都必须是该表可能具有的每个唯一键的一部分。

换句话说,表上的每个唯一键都必须使用表的分区表达式中的每个列。(这也包括表的主键,因为根据定义,它是唯一的键。这种特殊情况将在本节后面讨论。)例如,以下每个表创建语句都是无效的:

分区字段必须包含在主键字段内至于为什么关系型数据库会这样考虑程序员的斑竹是这么解释的:

为了确保主键的效率。否则同一主键区的东西一个在A分区一个在B分区显然会比较麻烦版权

下面讨论解决办法毕竟在一张表里日期做主键的还是不常见。

方法1:

顺应关系型数据库的要求就把分区字段加入到主键中组成复合主键

创建表T1(

id int(8)不为空自动增量,

创建时间日期时间不为空,

主键(标识,创建时间)

)ENGINE=InnoDB AUTO _ INCREMENT=1 DEFAULT CHARSET=ut F8

按范围划分(截止日(创建时间))

分区p0蛋白值小于(至_天(" 2010-04-15 ")),

分区第一亲代值小于(至_天(" 2010-05-01 ")),

分区p2值小于(至_天(" 2010-05-15 ")),

分区p3值小于(至_天(" 2010-05-31 ")),

分区p4值小于(截止日期(" 2010-06-15 ")),

分区p19值小于最大值);测试通过分区成功。

方法2:

既然关系型数据库要把分区字段包含在主键内才能创建分区那么在创建表的时候先不指定主键字段是否可以呢

测试如下:

创建表T1(

整数(8)不为空,

创建时间日期时间不为空

)ENGINE=InnoDB AUTO _ INCREMENT=1 DEFAULT CHARSET=ut F8

按范围划分(截止日(创建时间))

分区p0蛋白值小于(至_天(" 2010-04-15 ")),

分区第一亲代值小于(至_天(" 2010-05-01 ")),

分区p2值小于(至_天(" 2010-05-15 ")),

分区p3值小于(至_天(" 2010-05-31 ")),

分区p4值小于(截止日期(" 2010-06-15 ")),

分区p19值小于最大值);测试通过分区成功好的,版权所有

继续添加上主键

Altert1添加主键(ID)错误1503与之前相同的错误。

Altert1 add主键(ID,createtime)成功创建了主键,但它仍然是一个复合主键。似乎没有出路。我们必须听指令。

主键已成功创建,标识已添加到自增字段设置中。

alter table t1更改id id int不为null auto _ increment

alter table t1 auto _ increment=1;结论MYSQL的分区字段必须包含在主键字段中。以上就是mysql添加分区错误时如何做的细节!

来源:php中文网站

标签:

为您推荐

新闻快讯