我有一个程序,它经常用一个表交换一个分区。
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时,我得到以下消息:
一般错误:分区和表之间的非匹配属性‘即时列(S)’
奇怪的是,如果我没有在最后一个位置添加列:
ALTER TABLE ... ADD COLUMN ... AFTER someField;...then分区交换工作正常!
这是"**INSTANT COLUMN(s)** attribute“,我做错了什么?
这是个虫子吗?我使用的是MySQL 8.0.12。
发布于 2018-08-24 09:49:35
在ALGORITHM=INPLACE语句中显式地指定ALTER TABLE (如果表的引擎不支持就地支持的话)。
https://dba.stackexchange.com/questions/215743
复制相似问题