批处理 API
LibSQL 批处理 API 说明:source
使用 libSQL 客户端库,批处理是指在隐式事务中按顺序执行的一个或多个 SQL 语句。事务由 libSQL 后端控制。如果所有语句都成功,则提交事务。如果任何一个语句失败,则回滚整个事务,并且不进行任何更改。
D1 批处理 API 说明:source
批处理会在一次数据库调用中发送多条 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()...,