批处理 API

LibSQL 批处理 API 说明:source

使用 libSQL 客户端库,批处理是指在隐式事务中按顺序执行的一个或多个 SQL 语句。事务由 libSQL 后端控制。如果所有语句都成功,则提交事务。如果任何一个语句失败,则回滚整个事务,并且不进行任何更改。

D1 批处理 API 说明:source

批处理会在一次数据库调用中发送多条 SQL 语句。这会对性能产生巨大的影响,因为它减少了从网络往返到 D1 的延迟。D1 以自动提交方式运行。我们的实现保证列表中的每个语句都将按顺序、非并发地执行和提交。批处理语句是 SQL 事务。如果序列中的某个语句失败,则会返回该语句的错误,并中止或回滚整个序列。

Drizzle ORM 为 LibSQLNeonD1 提供了批量运行 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 的类型为:

libSQL
Neon
D1
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()...,