Учебники

PostgreSQL — СДЕЛКИ

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

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

Практически вы объедините много запросов PostgreSQL в группу и выполните все их вместе как часть транзакции.

Свойства сделок

Транзакции имеют следующие четыре стандартных свойства, обычно обозначаемых аббревиатурой ACID —

  • Атомарность — гарантирует, что все операции внутри рабочего блока успешно завершены; в противном случае транзакция прерывается в точке сбоя, а предыдущие операции возвращаются в прежнее состояние.

  • Согласованность — Гарантирует, что база данных корректно меняет состояния при успешной фиксации транзакции.

  • Изоляция — позволяет транзакциям работать независимо друг от друга и быть прозрачными друг для друга.

  • Долговечность — Гарантирует, что результат или результат совершенной транзакции сохраняется в случае сбоя системы.

Атомарность — гарантирует, что все операции внутри рабочего блока успешно завершены; в противном случае транзакция прерывается в точке сбоя, а предыдущие операции возвращаются в прежнее состояние.

Согласованность — Гарантирует, что база данных корректно меняет состояния при успешной фиксации транзакции.

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

Долговечность — Гарантирует, что результат или результат совершенной транзакции сохраняется в случае сбоя системы.

Контроль транзакций

Следующие команды используются для управления транзакциями —

  • BEGIN TRANSACTION — начать транзакцию.

  • COMMIT — для сохранения изменений вы также можете использовать команду END TRANSACTION .

  • ROLLBACK — для отката изменений.

BEGIN TRANSACTION — начать транзакцию.

COMMIT — для сохранения изменений вы также можете использовать команду END TRANSACTION .

ROLLBACK — для отката изменений.

Команды управления транзакциями используются только с командами DML INSERT, UPDATE и DELETE. Их нельзя использовать при создании таблиц или их удалении, поскольку эти операции автоматически фиксируются в базе данных.

Команда НАЧАЛО СДЕЛКИ

Транзакции могут быть начаты с использованием BEGIN TRANSACTION или просто BEGIN. Такие транзакции обычно сохраняются до следующей команды COMMIT или ROLLBACK. Но транзакция также ROLLBACK, если база данных закрыта или возникает ошибка.

Ниже приведен простой синтаксис для запуска транзакции:

BEGIN;

or

BEGIN TRANSACTION;

Команда COMMIT

Команда COMMIT — это команда транзакций, используемая для сохранения изменений, вызванных транзакцией, в базу данных.

Команда COMMIT сохраняет все транзакции в базе данных с момента последней команды COMMIT или ROLLBACK.

Синтаксис команды COMMIT следующий:

COMMIT;

or

END TRANSACTION;

Команда ROLLBACK

Команда ROLLBACK — это команда транзакций, используемая для отмены транзакций, которые еще не были сохранены в базе данных.

Команду ROLLBACK можно использовать только для отмены транзакций с момента выполнения последней команды COMMIT или ROLLBACK.

Синтаксис команды ROLLBACK следующий:

ROLLBACK;

пример

Предположим, что таблица COMPANY содержит следующие записи:

 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000

Теперь давайте запустим транзакцию и удалим записи из таблицы, имеющие возраст = 25, и, наконец, мы используем команду ROLLBACK, чтобы отменить все изменения.

testdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
ROLLBACK;

Если вы проверите, в таблице COMPANY все еще есть следующие записи —

 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000

Теперь давайте запустим еще одну транзакцию и удалим записи из таблицы, имеющие возраст = 25, и, наконец, мы используем команду COMMIT, чтобы зафиксировать все изменения.

testdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
COMMIT;

Если вы проверите таблицу COMPANY, она все еще имеет следующие записи —