批量 API
LibSQL 批量 API 解释: 来源
使用 libSQL 客户端库时,批量处理是一个或多个按顺序在隐式事务中执行的 SQL 语句。事务由 libSQL 后端控制。如果所有语句都成功,则事务被提交。如果任何语句失败,则整个事务回滚,不进行任何更改。
D1 批量 API 解释: 来源
批量处理在一个数据库调用中发送多个 SQL 语句。这可以极大地影响性能,因为它减少了到 D1 的网络往返延迟。D1 在自动提交模式下运行。我们的实现保证列表中的每个语句都将按顺序、非并发地执行和提交。批量语句是 SQL 事务。如果序列中的某个语句失败,则该特定语句将返回错误,并中止或回滚整个序列。
Drizzle ORM 提供了用于 LibSQL
、Neon
和 D1
的批量运行 SQL 语句的 API
const batchResponse: BatchResponse = await db.batch([
db.insert(usersTable).values({ id: 1, name: 'John' }).returning({ id: usersTable.id }),
db.update(usersTable).set({ name: 'Dan' }).where(eq(usersTable.id, 1)),
db.query.usersTable.findMany({}),
db.select().from(usersTable).where(eq(usersTable.id, 1)),
db.select({ id: usersTable.id, invitedBy: usersTable.invitedBy }).from(usersTable),
]);
此示例中 batchResponse
的类型将是
type BatchResponse = [
{
id: number;
}[],
ResultSet,
{
id: number;
name: string;
verified: number;
invitedBy: number | null;
}[],
{
id: number;
name: string;
verified: number;
invitedBy: number | null;
}[],
{
id: number;
invitedBy: number | null;
}[],
]
所有可以在 db.batch
中使用的可能构建器
db.all(),
db.get(),
db.values(),
db.run(),
db.execute(),
db.query.<table>.findMany(),
db.query.<table>.findFirst(),
db.select()...,
db.update()...,
db.delete()...,
db.insert()...,