JS: SQL

Теория: Транзакции

Некоторые операции в базах данных должны быть выполнены как единое целое. Если одна из операций неудачна, то все остальные откатываются и база данных сохраняет свое исходное состояние. Это называется транзакция.

Транзакции обеспечивают целостность данных, управление параллельным доступом к данным и обеспечивают исключение избыточного чтения и записи.

Для выполнения транзакций в библиотеке есть специальный метод transaction():

import { createPool, sql } from 'slonik'

const pool = await createPool(uri)
pool.connect(async (connection) => {
  const result = await connection.transaction(async (transactionConnection) => {
    const user = {
      username: 'Tony Stark',
      phone: '+123456789',
    }
    const userId = await transactionConnection.oneFirst(sql.typeAlias('id')`
      INSERT INTO users (username, phone) VALUES (${user.username}, ${user.phone}) RETURNING id
    `)
    const taskId = await transactionConnection.oneFirst(sql.typeAlias('id')`
      INSERT INTO tasks(userId, text) VALUES (${userId}, 'Перекусить') RETURNING id
    `)

    return { userId, taskId }
  })

  console.log(result) // { userId, taskId }
})

Функция принимает колбек, в который передается функция для выполнения запросов. Это обеспечивает гарантию, что все запросы выполняться на одном соединении. При необходимости, из колбека можно вернуть данные.

Завершено

0 / 5