功能简介
Transactions 用于把多步 Table/Row 操作暂存到同一事务,再显式 commit 或 rollback。读取接口可以携带 transactionId 观察本事务内尚未提交的变化;过期、已提交或已回滚事务不能继续写入。
当前支持范围
- 数据库事务(SUPPORTED):提供事务创建、操作暂存、提交和回滚接口,用于组合多步数据变更。
适用场景
- 同时更新多条相关 Row,避免部分成功。
- 先暂存一组操作,再在校验通过后提交。
- 在提交前执行事务内读取或 Aggregation。
前置条件
- 调用者具备目标 Row 的读写权限。
- 了解事务 TTL 和最大操作数量。
- 所有操作使用同一个 Project 与 transactionId。
Console 操作路径
Console 当前没有独立事务工作台。使用 SDK/REST 创建事务、追加 operations,再提交或回滚;Console 的 Rows 页面不代表事务隔离视图。
SDK 示例
SDK · TypeScript
import { Client } from 'appbase-web-sdk';
const client = new Client()
.setEndpoint('https://<APPBASE_HOST>/v1')
.setProject('<PROJECT_ID>');
import { TablesDB } from 'appbase-web-sdk';
const tables = new TablesDB(client);
const transaction = await tables.createTransaction({ ttl: 120 });
await tables.createOperations({
transactionId: transaction.$id,
operations: [{
action: 'create',
databaseId: '<DATABASE_ID>',
tableId: '<TABLE_ID>',
rowId: '<ROW_ID>',
data: { status: 'pending' }
}]
});
await tables.updateTransaction({
transactionId: transaction.$id,
commit: true
});REST 示例
REST · Bash
curl 'https://<APPBASE_HOST>/v1/tablesdb/transactions' \
-X POST \
-H 'X-Appwrite-Project: <PROJECT_ID>' \
-H 'X-Appwrite-JWT: <USER_JWT>' \
-H 'Content-Type: application/json' \
--data '{"ttl":120}'常见错误
| 现象 | 处理建议 |
|---|---|
transaction_not_found | transactionId 无效、不可见或已清理。 |
transaction_not_ready | 事务状态不再是 pending,停止追加操作。 |
transaction_expired | 重新创建事务并按幂等策略重放业务操作。 |
| 提交冲突 | 不要同时设置 commit 与 rollback,且不要重复终结事务。 |
当前限制
- 事务有 TTL、操作数量和负载上限。
- 外部 API 和消息发送不能自动并入数据库事务。
- 客户端必须自行设计业务幂等,避免网络重试重复写入。
Appwrite 兼容说明
事务概念与 TablesDB SDK 保持兼容;具体 operation 结构以当前生成 SDK Model 为准。
AppBase 增强说明
AppBase Aggregation 可以在提供 transactionId 时纳入当前事务的未提交变化。
发布状态和验证 Commit
origin/main 已核验。验证 Commit:0363062a1c7ea08741975bb5ba0c3361663c9353。
权威来源文件列表
backend-candidate:src/Appwrite/Platform/Modules/Databases/Http/TablesDB/Transactions/backend-candidate:tests/e2e/Services/TablesDB/Transactions/TablesDBACIDTest.phpbackend-candidate:tests/e2e/Services/TablesDB/Transactions/TablesDBTransactionsCustomServerTest.php
Appwrite taxonomy 仅作信息架构参考:https://appwrite.io/docs/products/databases。上游页面不是 AppBase 实现证据。