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

INSERT .. RETURNING

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

Postgres 数据库原生支持 INSERT .. RETURNING 子句。这是一个非常强大的概念,它使用 JDBC 的 getGeneratedKeys() 方法为所有其他方言模拟。看这个例子

// Add another author, with a generated ID
Record record =
create.insertInto(AUTHOR, AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME)
      .values("Charlotte", "Roche")
      .returningResult(AUTHOR.ID)
      .fetchOne();

System.out.println(record.getValue(AUTHOR.ID));

// For some RDBMS, this also works when inserting several values
// The following should return a 2x2 table
Result<?> result =
create.insertInto(AUTHOR, AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME)
      .values("Johann Wolfgang", "von Goethe")
      .values("Friedrich", "Schiller")
      // You can request any field. Also trigger-generated values
      .returningResult(AUTHOR.ID, AUTHOR.CREATION_DATE)
      .fetch();

某些数据库对 INSERT 之后返回生成的键的支持较差。在这些情况下,jOOQ 可能需要发出另一个 SELECT 语句,以便获取 @@identity 值。请注意,这可能会导致那些无法正确返回生成的 ID 值的数据库中出现竞争条件。有关更多信息,请参阅 jOOQ Javadoc 中 returningResult() 子句。

方言支持

此示例使用 jOOQ

insertInto(AUTHOR, AUTHOR.LAST_NAME).values("Doe").returningResult(AUTHOR.ID)

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

ASE、Access、Aurora MySQL、BigQuery、ClickHouse、Databricks、Derby、Exasol、HSQLDB、Hana、Informix、MemSQL、MySQL、Oracle、Redshift、Snowflake、Sybase、Teradata、Trino、Vertica

INSERT INTO AUTHOR (LAST_NAME)
VALUES ('Doe')

Aurora Postgres、CockroachDB、DuckDB、Firebird、Postgres、SQLite、YugabyteDB

INSERT INTO AUTHOR (LAST_NAME)
VALUES ('Doe')
RETURNING AUTHOR.ID

DB2、H2

SELECT ID
FROM FINAL TABLE (
  INSERT INTO AUTHOR (LAST_NAME)
  VALUES ('Doe')
) AUTHOR

MariaDB

INSERT INTO AUTHOR (LAST_NAME)
VALUES ('Doe')
RETURNING ID

SQLDataWarehouse、SQLServer

INSERT INTO AUTHOR (LAST_NAME)
OUTPUT inserted.ID
VALUES ('Doe')
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL

反馈

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

The jOOQ Logo