如何在单个MySQL查询中同时重命名表和列?
MySQL无法单条ALTER语句同时修改表名和列名
MySQL里没法用单条ALTER TABLE语句同时完成修改表名和列名的操作,也不需要嵌套查询——这两个操作必须分开执行。
原因很明确:RENAME(或RENAME TO)属于表级别的重命名操作,而CHANGE是列级别的修改操作,MySQL的ALTER TABLE语法不允许在同一条语句里混合这两类操作,你尝试的第二条语句不符合语法规范,所以执行失败。
正确的操作方式是分两条独立的ALTER TABLE语句执行,顺序可以任选:
方式一:先改列名,再改表名
ALTER TABLE MyTable CHANGE id id2 int; ALTER TABLE MyTable RENAME TO MyTable2;
方式二:先改表名,再改列名
ALTER TABLE MyTable RENAME TO MyTable2; ALTER TABLE MyTable2 CHANGE id id2 int;
如果担心执行过程中被其他操作干扰,且你的表使用的是InnoDB引擎,可以用事务包裹这两个操作,确保它们要么全部成功,要么全部回滚:
START TRANSACTION; ALTER TABLE MyTable CHANGE id id2 int; ALTER TABLE MyTable RENAME TO MyTable2; COMMIT;
内容的提问来源于stack exchange,提问作者Asperand
相关产品推荐
相关产品推荐

