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