ALTER TABLE .. ADD COLUMN .. FIRST, BEFORE, AFTER
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
大多数 RDBMS 维护表中列的逻辑顺序和物理顺序。虽然物理顺序(列值在磁盘块中的存储方式)是 SQL 语言隐藏的实现细节,但逻辑顺序与许多 SQL 功能相关,包括
- SELECT * 语法的行为(
*
根据表中列的逻辑顺序展开) - 客户端语言(如 PL/SQL)在使用
TABLE%ROWTYPE
和类似语法时将数据存储在记录表示中 - 像 jOOQ 这样的库会将此排序用于代码生成 表、记录等等
- 客户端应用程序和 SQL 编辑器(如 Dbeaver)将以声明的逻辑列顺序显示结果
所有 RDBMS 都将维护在 CREATE TABLE 语句 中声明的逻辑列顺序,并在使用 ALTER TABLE .. ADD COLUMN 语句 时将新列追加到表的末尾。
但只有少数 RDBMS 允许在创建表后修改逻辑列位置。这可以使用以下语法之一完成
// Adding a single column and specify its position create.alterTable("table").add("column", INTEGER).after("other_column").execute(); create.alterTable("table").add("column", INTEGER).before("other_column").execute(); create.alterTable("table").add("column", INTEGER).first().execute();
alterTable("t").add("c", INTEGER).after("other")
翻译成以下特定方言的表达式
Aurora MySQL, H2, MariaDB, MemSQL, MySQL
ALTER TABLE t ADD c int AFTER other
ClickHouse
ALTER TABLE t ADD COLUMN c Nullable(integer) AFTER other
Databricks
ALTER TABLE t ADD COLUMN (c int AFTER other)
ASE, Access, Aurora Postgres, BigQuery, CockroachDB, DB2, Derby, DuckDB, Exasol, Firebird, HSQLDB, Hana, Informix, Oracle, Postgres, Redshift, SQLDataWarehouse, SQLServer, SQLite, Snowflake, Sybase, Teradata, Trino, Vertica, YugabyteDB
/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL
alterTable("t").add("c", INTEGER).before("other")
翻译成以下特定方言的表达式
H2, HSQLDB
ALTER TABLE t ADD c int BEFORE other
ASE, Access, Aurora MySQL, Aurora Postgres, BigQuery, ClickHouse, CockroachDB, DB2, Databricks, Derby, DuckDB, Exasol, Firebird, Hana, Informix, MariaDB, MemSQL, MySQL, Oracle, Postgres, Redshift, SQLDataWarehouse, SQLServer, SQLite, Snowflake, Sybase, Teradata, Trino, Vertica, YugabyteDB
/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL
alterTable("t").add("c", INTEGER).first()
翻译成以下特定方言的表达式
Aurora MySQL, H2, MariaDB, MemSQL, MySQL
ALTER TABLE t ADD c int FIRST
ClickHouse
ALTER TABLE t ADD COLUMN c Nullable(integer) FIRST
Databricks
ALTER TABLE t ADD COLUMN (c int FIRST)
Firebird
EXECUTE BLOCK AS BEGIN EXECUTE STATEMENT ' ALTER TABLE t ADD c integer '; EXECUTE STATEMENT ' ALTER TABLE t ALTER c POSITION 1 '; END
ASE, Access, Aurora Postgres, BigQuery, CockroachDB, DB2, Derby, DuckDB, Exasol, HSQLDB, Hana, Informix, Oracle, Postgres, Redshift, SQLDataWarehouse, SQLServer, SQLite, Snowflake, Sybase, Teradata, Trino, Vertica, YugabyteDB
/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL
反馈
您对此页面有任何反馈吗? 我们很乐意听到!