Что такое транзакция
Транзакция является единицей работы с базой данных (далее – БД). Это последовательность операций, выполняемых в логическом порядке пользователем, либо программой, которая работает с БД.
Мы можем сказать, что транзакция – это распространение изменений в БД. Например, если мы создаём, изменяем или удаляем запись, то мы выполняем транзакцию. Крайне важно контролировать транзакции для гарантирования.
Основные концепции (свойства) транзакции описываются аббревиатурой ACID – Atomicity, Consistency, Isolation, Durability (Атомарность, Согласованность, Изолированность, Долговечность).
Атомарность:
Атомарность гарантирует, что любая транзакция будет зафиксирована только целиком (полностью). Если одна из операций в последовательности не будет выполнена, то вся транзакция будет отменена. Тут вводится понятие “отката” (rollback). Т.е. внутри последовательности будут происходить определённые изменения, но по итогу все они будут отменены (“откачены”) и по итогу пользователь не увидит никаких изменений.
Согласованность:
Это означает, что любая завершённая транзакция (транзакция, которая достигла завершения транзакции – end of transaction) фиксирует только допустимые результаты. Например, при переводе денег с одного счёта на другой, в случае, если деньги ушли с одного счёта, они должны прийти на другой (это и есть согласованность системы). Списание и зачисление – это две разные транзакции, поэтому первая транзакция пройдёт без ошибок, а второй просто не будет. Именно поэтому крайне важно учитывать это свойство и поддерживать баланс системы.
Изолированность:
Каждая транзакция должна быть изолирована от других, т.е. её результат не должен зависеть от выполнения других параллельных транзакций. На практике, изолированность крайне труднодостижимая вещь, поэтому здесь вводится понятие “уровни изолированности” (транзакция изолируется не полностью).
Долговечность:
Эта концепция гарантирует, что если мы получили подтверждение о выполнении транзакции, то изменения, вызванные этой транзакцией не должны быть отменены из-за сбоя системы (например, отключение электропитания).
Oct. 9, 2023, Источник
Транзакция – это последовательность операций, которые выполняются по принципу “Все или нечего”.
Операции как бы выполняются виртуально, и если все они завершились удачно, то делается COMMIT
и данные обновляются, либо ROLLBACK
и данные откатываются.
Как открыть транзакцию
В Oracle транзакция открывается сама, по факту первой изменяющей операции. А в MySql надо явно писать «start transaction».
BEGIN
для PostgerSQL
Но есть операции, которые делают не явный коммит в транзакции и поэтому тут нужно быть аккауратными:
дроптейбел
альтер тейбел
транкет тейбел
Oct. 9, 2023, Источник
Транзакция в базах данных представляет собой логическую операцию, состоящую из одного или нескольких SQL запросов, которые образуют единое целое. Основные характеристики транзакций в базах данных:
1. Атомарность (Atomicity): Транзакция является атомарной, что означает, что она либо полностью выполняется, либо не выполняется вообще. Если один из запросов в транзакции не может быть выполнен, то все изменения, сделанные этой транзакцией, отменяются (откат).
2. Согласованность (Consistency): Транзакция должна обеспечивать согласованность базы данных. Это означает, что только допустимые изменения могут быть внесены в базу данных, и ее целостность сохраняется после завершения транзакции.
3. Изолированность (Isolation): Транзакции должны выполняться изолированно друг от друга. Это означает, что изменения, внесенные одной транзакцией, не должны видны другим транзакциям до тех пор, пока они не будут зафиксированы (или завершены).
4. Долговечность (Durability): После успешного завершения транзакции ее изменения должны остаться постоянными и устойчивыми к сбоям системы. Даже в случае отказа системы или перезагрузки, изменения, внесенные транзакцией, должны быть сохранены.Пример транзакции:
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 123;
UPDATE accounts SET balance = balance + 100 WHERE id = 456;
COMMIT;
В этом примере два запроса обновления выполняются в рамках одной транзакции. Если оба запроса успешно завершаются, изменения становятся постоянными (фиксируются) с помощью команды `COMMIT`. Если в ходе выполнения транзакции возникает ошибка, то она откатывается с помощью команды `ROLLBACK`, и все изменения отменяются.
Feb. 17, 2024, easyoffer