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
反馈
您对此页面有任何反馈吗? 我们很乐意听到您的声音!