MySQL中ALTER TABLE添加RANGE分区出现#1064语法错误求助
解决MySQL添加分区的语法错误问题
嘿,这个问题我之前也碰到过,核心是你混淆了两种分区操作的语法,咱们一步步来理清楚:
错误原因
你写的ALTER TABLE logs ADD PARTITION BY RANGE (...)是错误的组合语法——ADD PARTITION是给已经分区的表新增一个分区,而PARTITION BY是用来给非分区表设置分区规则的,这俩不能凑在一起用,所以MySQL才报了语法错误。
分场景解决
场景1:你的logs表还没设置分区,想把它改成RANGE分区表
直接去掉ADD关键字,用PARTITION BY来定义分区规则:
ALTER TABLE `logs` PARTITION BY RANGE (date) ( PARTITION P1 VALUES LESS THAN (1515745595) );
这里要注意几个细节:
- 确保
date是表中存在的列,并且数据类型是整数(你用的时间戳没问题)或者日期类型,符合RANGE分区的要求 - 如果表数据量很大,这个操作会锁表,建议选业务低峰期执行
- 确认你的MySQL版本支持分区功能(InnoDB、MyISAM引擎在社区版里都支持,部分小众引擎不支持)
场景2:你的logs表已经是分区表,想新增一个P1分区
那只需要保留ADD PARTITION,去掉后面的BY RANGE (date)(因为分区规则已经在表创建时定义过了):
ALTER TABLE `logs` ADD PARTITION ( PARTITION P1 VALUES LESS THAN (1515745595) );
这种情况要注意:新分区的范围不能和已有分区重叠,并且要符合已有的分区规则(比如RANGE分区的VALUES LESS THAN值必须比已有分区的最大值大)
内容的提问来源于stack exchange,提问作者sobhan




