mysql - H2 添加多列 MySQL 语法

标签 mysql sql h2 alter-table alter

我有下表:

CREATE TABLE users (
  id   INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(256)
);

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

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

MySQL 语法:

ALTER TABLE users
  ADD `col1` INT,
  ADD `col2` INT,
  ADD `col3` INT
  AFTER id;

H2语法:

ALTER TABLE users
  ADD (
    `col1` INT,
    `col2` INT,
    `col3` INT
  ) AFTER `id`;

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

// note MODE=MYSQL in the end
jdbc:h2:users;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL

H2 的补丁已应用于 this discussion 的范围内.

编辑:

当然我可以使用这种语法(这对于大表来说很糟糕)而且我必须管理这些 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`;

最佳答案

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

关于mysql - H2 添加多列 MySQL 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48565633/

相关文章:

mysql - 为什么年龄过滤器不使用 Laravel 中的 sql 查询过滤年龄?

mysql - SQL "replace"id 与客户纪元

mysql - hibernate - 两个日期之间的差异

php - 计算时差(日期时间)时的 strtotime 和奇怪的结果

mysql - 1071 - 指定的 key 太长;最大 key 长度为 1000 字节

sql - 从数据库中获取中值

java - 从 Spring Boot 获取与 H2 数据库的连接

spring-boot - H2 在使用@Column(name ="someName",columnDefinition = "FLOAT(10,7)") 时不创建表

python - 如何防止从 Python 向 MySQLdb 语句中插入额外的引号?

mysql - 一个 "Search"mysql 查询问题