INSERT .. VALUES
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
INSERT .. VALUES 插入单行
记录可以使用 VALUES()
构造函数或 SELECT
语句提供。 jOOQ 支持这两种类型的 INSERT
语句。 这里给出一个使用 VALUES()
构造函数的 INSERT
语句示例
INSERT INTO AUTHOR (ID, FIRST_NAME, LAST_NAME) VALUES (100, 'Hermann', 'Hesse');
create.insertInto(AUTHOR, AUTHOR.ID, AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME) .values(100, "Hermann", "Hesse") .execute();
请注意,对于高达 22 的显式度数,VALUES()
构造函数提供了额外的类型安全性。 以下示例说明了这一点
InsertValuesStep3<AuthorRecord, Integer, String, String> step = create.insertInto(AUTHOR, AUTHOR.ID, AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME); step.values("A", "B", "C"); // ^^^ Doesn't compile, the expected type is Integer
INSERT .. VALUES 插入多行
SQL 标准规定可以在 INSERT 语句的 VALUES() 构造函数中提供多行。 这是一个多记录 INSERT 的例子
INSERT INTO AUTHOR (ID, FIRST_NAME, LAST_NAME) VALUES (100, 'Hermann', 'Hesse'), (101, 'Alfred', 'Döblin');
create.insertInto(AUTHOR, AUTHOR.ID, AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME) .values(100, "Hermann", "Hesse") .values(101, "Alfred", "Döblin") .execute()
jOOQ 尽量贴近实际的 SQL。 然而,详细来说,Java 的表达能力是有限的。 这就是为什么在多记录插入中,values() 子句对于每个记录都会重复。
有些 RDBMS 不支持在单个语句中插入多个记录。 在这些情况下,jOOQ 使用以下 SQL 模拟多记录 INSERT
INSERT INTO AUTHOR (ID, FIRST_NAME, LAST_NAME) SELECT 100, 'Hermann', 'Hesse' FROM DUAL UNION ALL SELECT 101, 'Alfred', 'Döblin' FROM DUAL;
create.insertInto(AUTHOR, AUTHOR.ID, AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME) .values(100, "Hermann", "Hesse") .values(101, "Alfred", "Döblin") .execute();
如果您的插入行或记录是动态的,则可以使用 valuesOfRows()
或 valuesOfRecords()
代替
INSERT INTO AUTHOR (ID, FIRST_NAME, LAST_NAME) VALUES (100, 'Hermann', 'Hesse'), (101, 'Alfred', 'Döblin');
List<Record3<Integer, String, String>> records = ... create.insertInto(AUTHOR, AUTHOR.ID, AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME) .valuesOfRecords(records) .execute();
方言支持
此示例使用 jOOQ
insertInto(AUTHOR).columns(AUTHOR.ID, AUTHOR.LAST_NAME).values(100, "Hesse")
翻译成以下特定方言的表达式
所有方言
INSERT INTO AUTHOR (ID, LAST_NAME) VALUES ( 100, 'Hesse' )
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL
反馈
您对此页面有任何反馈吗? 我们很乐意听到您的反馈!