批量 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()...,