浏览全部文档 · 14/37

功能简介

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}'

权限模型

创建事务需要允许的用户身份或 API Key;每个 operation 仍按目标资源权限和 Scope 校验。transactionId 不能跨 Project 使用。

常见错误

现象处理建议
transaction_not_foundtransactionId 无效、不可见或已清理。
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.php
  • backend-candidate:tests/e2e/Services/TablesDB/Transactions/TablesDBTransactionsCustomServerTest.php

Appwrite taxonomy 仅作信息架构参考:https://appwrite.io/docs/products/databases。上游页面不是 AppBase 实现证据。

继续阅读