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