可用版本: Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

INSERT .. DEFAULT VALUES

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

SQL 中一个不太为人所知的语法特性是 INSERT .. DEFAULT VALUES 语句,它会插入一条记录,其中包含每行的 DEFAULT 值。 它的写法如下

INSERT INTO AUTHOR
DEFAULT VALUES;
 
create.insertInto(AUTHOR)
      .defaultValues()
      .execute();

在您想要在同一事务中“保留”数据库中的一行以供后续UPDATE 语句使用的情况下,这可能很有意义。 或者,如果您只是想发送一个包含触发器生成的默认值(例如 ID 或时间戳)的事件。

并非所有数据库都支持 DEFAULT VALUES 子句,但 jOOQ 可以使用等效语句来模拟它

INSERT INTO AUTHOR
    (ID, FIRST_NAME, LAST_NAME, ...)
VALUES (
	DEFAULT,
	DEFAULT,
	DEFAULT, ...);
 
create.insertInto(
        AUTHOR, AUTHOR.ID, AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME, ...)
      .values(
      	defaultValue(AUTHOR.ID),
      	defaultValue(AUTHOR.FIRST_NAME),
      	defaultValue(AUTHOR.LAST_NAME), ...)
      .execute();

DEFAULT 关键字(或DSL#defaultValue() 方法)也可以仅用于单个列,尽管这将与完全忽略该列具有相同的效果。

方言支持

此示例使用 jOOQ

insertInto(AUTHOR).defaultValues()

翻译成以下特定方言的表达式

ASE, Access, Aurora MySQL, BigQuery, DB2, Databricks, Derby, MariaDB, MemSQL, MySQL, Oracle, Snowflake

INSERT INTO AUTHOR
VALUES (
  DEFAULT,
  DEFAULT,
  DEFAULT,
  DEFAULT,
  DEFAULT,
  DEFAULT
)

Aurora Postgres, ClickHouse, CockroachDB, DuckDB, Exasol, Firebird, H2, HSQLDB, Postgres, SQLDataWarehouse, SQLServer, Teradata, YugabyteDB

INSERT INTO AUTHOR
DEFAULT VALUES

Hana, Informix, Redshift, SQLite, Sybase, Vertica

INSERT INTO AUTHOR (FIRST_NAME, DATE_OF_BIRTH, YEAR_OF_BIRTH, DISTINGUISHED)
VALUES (
  NULL, 
  NULL, 
  NULL, 
  NULL
)

Trino

/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL

反馈

您对此页面有任何反馈吗? 我们很乐意听到您的反馈!

The jOOQ Logo