Транзакции¶
Транзакция — это последовательность операций чтения/записи, которые обрабатываются как единое целое, т. е. либо все операции завершаются успешно, либо все операции отклоняются с ошибкой.
Prisma позволяет использовать транзакции тремя способами:
вложенные запросы (см. выше): операции с родительскими и связанными записями выполняются в контексте одной транзакции
1 2 3 4 5 6 7 8 9 10 11 12 |
|
пакетированные/массовые (batch/bulk) транзакции: выполнение нескольких операций за один раз с помощью таких запросов, как createMany
, updateMany
и deleteMany
1 2 3 4 5 6 7 8 9 10 11 12 |
|
вызов метода $transaction.
$transaction¶
Интерфейс $transaction
может быть использован в двух формах:
$transaction([ query1, query2, ...queryN ])
— принимает массив последовательно выполняемых запросов;$transaction(fn)
— принимает функцию, которая может включать запросы и другой код.
Пример транзакции, возвращающей посты, в заголовке которых встречается слово TypeScript и общее количество постов:
1 2 3 4 5 6 7 8 9 |
|
В $transaction
допускается использование SQL:
1 2 3 4 |
|
Интерактивные транзакции¶
Интерактивные транзакции предоставляют разработчикам больший контроль над выполняемыми в контексте транзакции операциями. В данный момент они имеют статус экспериментальной возможности, которую можно включить следующим образом:
1 2 3 4 |
|
Рассмотрим пример совершения платежа.
Предположим, что у Alice и Bob имеется по 100$ на счетах (account), и Alice хочет отправить Bob свои 100$.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
|
Подробнее о транзакциях можно почитать здесь.