Error number: 3178; Symbol: ER_UNSUPPORTED_ALTER_ONLINE_ON_VIRTUAL_COLUMN; SQLSTATE: HY000
Message: ADD COLUMN col…VIRTUAL, ADD INDEX(col)
错误说明:
ER_UNSUPPORTED_ALTER_ONLINE_ON_VIRTUAL_COLUMN错误指示在虚拟列上不支持使用ALTER TABLE语句进行在线修改。MySQL报出此错误,表明在更改表结构时尝试使用在线表修改,但此操作对虚拟列是不可行的。
常见的场景是在更新表结构时忘记考虑改变虚拟列的情况,因此会忽略使用ALTER TABLE语句的在线修改功能;而忘记删除虚拟列,则会出现该错误,例如尝试用ALTER TABLE DROP COLUMN语句删除虚拟列。
解决方法:
由于MySQL不支持在线更新虚拟列,因此当在修改表结构时必须为虚拟列提供离线修改的解决方案,即在ALTER TABLE DROP COLUMN语句的前面先创建一个新表,取消加入虚拟列;然后将原始表的记录从新表中插入,最后将新表重新命名为原来表的名字。