H2 添加多列 MySQL 语法

And*_*mov 6 mysql sql alter-table h2 alter

我有下表:

CREATE TABLE users (
  id   INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(256)
);
Run Code Online (Sandbox Code Playgroud)

我想在一个查询中添加多个列。我在测试中经常使用 H2,但在生产中我使用 MySQL。两者都使用相同的 DDL 脚本。

H2 和 MySQL 是否有允许添加多列的通用语法?

MySQL语法:

ALTER TABLE users
  ADD `col1` INT,
  ADD `col2` INT,
  ADD `col3` INT
  AFTER id;
Run Code Online (Sandbox Code Playgroud)

H2语法:

ALTER TABLE users
  ADD (
    `col1` INT,
    `col2` INT,
    `col3` INT
  ) AFTER `id`;
Run Code Online (Sandbox Code Playgroud)

如果有帮助,我的 H2 JDBC URL 是:

// note MODE=MYSQL in the end
jdbc:h2:users;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
Run Code Online (Sandbox Code Playgroud)

本次讨论的范围内应用了 H2 补丁。

编辑:

当然,我可以使用这种语法(这对于大表来说太可怕了)并且我必须管理这些AFTER语句以保存列顺序:

ALTER TABLE `users`
  ADD `col1` INT AFTER `id`;

ALTER TABLE `users`
  ADD `col2` INT AFTER `col1`;

ALTER TABLE `users`
  ADD `col3` INT AFTER `col2`;
Run Code Online (Sandbox Code Playgroud)

小智 6

据我所知,没有通用的语法。有些东西不能从 MySQL 转换为 H2,“在一个语句中添加多个列”就是其中之一。我同意添加单个列对于大表来说是可怕的,这就是为什么当我们在我的项目中遇到这样的情况时,我们为测试 (H2) 和生产 (MySQL) 运行单独的迁移。