MySQL 8.0.28使用ALGORITHM=INSTANT删列报错1845问题咨询
问题结论
你不存在操作错误,报错核心原因是ALGORITHM=INSTANT模式删列是MySQL 8.0.29版本才正式推出的功能,你使用的8.0.28版本尚未支持该能力,你查阅的文档和实际使用的数据库版本存在偏差。
细节说明
- MySQL 8.0.28及更早的8.0系列版本中,ALGORITHM=INSTANT仅支持新增列、修改列默认值、调整索引可见性、重命名表等轻量操作,删列操作最低仅支持ALGORITHM=INPLACE模式,无法走INSTANT执行逻辑,因此会返回1845错误。
- 你看到的功能说明对应8.0.29及之后版本的规则。MySQL官方文档默认展示最新正式版的功能描述,查阅时如果没有手动切换到自身使用的对应小版本,很容易把高版本专属功能误用到低版本环境中。
- 你的测试表完全符合8.0.29版本INSTANT删列的约束条件:行格式为Dynamic、无FULLTEXT索引、非临时表、非COMPRESSED行格式、不存储在数据字典表空间,只要将MySQL升级到8.0.29及以上版本,无需修改现有SQL语句即可正常执行INSTANT模式删列。
适配排查方法
如果不确定当前MySQL版本支持的INSTANT DDL范围,可以先不指定ALGORITHM参数执行DDL,执行完成后运行如下语句查看实际生效的DDL算法,避免版本差导致的误判:
SELECT SQL_TEXT, MYSQL_DDL_ALGORITHM, MYSQL_DDL_LOGGING FROM performance_schema.events_statements_history WHERE SQL_TEXT LIKE '%ALTER TABLE%' ORDER BY EVENT_ID DESC LIMIT 1;
内容的提问来源于stack exchange,提问作者mabead
相关产品推荐
相关产品推荐

