我有一个定期与表交换分区的程序。
MyTable
是一个分区表,并且MyTableTemplate
是这个表的一个空副本,具有相同的结构但没有分区。
过程如下:
CREATE TABLE tmp LIKE MyTableTemplate;
INSERT INTO tmp VALUES (...);
// more inserts...
ALTER TABLE MyTable EXCHANGE PARTITION p1 WITH TABLE tmp;
DROP TABLE tmp;
到目前为止它运行良好,直到我需要向表中添加一列:
ALTER TABLE MyTable ADD COLUMN someColumn TINYINT(1) UNSIGNED NULL DEFAULT NULL;
ALTER TABLE MyTableTemplate ADD COLUMN someColumn TINYINT(1) UNSIGNED NULL DEFAULT NULL;
现在,当我运行时EXCHANGE PARTITION WITH TABLE
,我收到以下消息:
一般错误:1731 分区和表之间的不匹配属性“INSTANT COLUMN(s)”
奇怪的是,如果我不在最后一个位置添加列:
ALTER TABLE ... ADD COLUMN ... AFTER someField;
...然后分区交换工作正常!
这个“INSTANT COLUMN(s)
属性”是什么,我做错了什么?
这是一个错误吗?我正在使用 MySQL 8.0.12。
在语句中明确指定
ALGORITHM=INPLACE
(或者ALGORITHM=COPY
如果表的引擎不支持就地) 。ALTER TABLE