Зарегистрируйтесь, чтобы продолжить обучение

Транзакции 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 }
})

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

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff