advanced

Transactions

Выбирайте nested writes, batch transactions или interactive transactions по correctness, latency и retry behavior.

Prisma поддерживает nested writes, массив `$transaction([...])` и интерактивный `$transaction(async (tx) => ...)`. Выбирайте минимальный API под инвариант.

					await prisma.$transaction(async (tx) => {
  await tx.account.update({ where: { id }, data: { balance: { decrement: amount } } });
  await tx.account.update({ where: { id: target }, data: { balance: { increment: amount } } });
});
				

На интервью: сравнение API транзакций, retries, изоляция, вложенные сервисы, побочные эффекты вне БД внутри interactive transaction.

Типовые ошибки: interactive transaction держит соединение во время кода приложения; retry без идемпотентности дублирует эффекты.

Компромисс — выразительные nested writes против времени удержания соединения.

Чеклист:

  • API под форму инварианта.
  • Короткое тело транзакции.
  • Retry-safe операции.
  • Commit до внешнего IO, когда возможно.