PostgreSQL - ОПЕРАЦИИ
Транзакция - это единица работы, выполняемая в отношении базы данных. Транзакции - это единицы или последовательности работы, выполняемые в логическом порядке, будь то вручную пользователем или автоматически какой-либо программой базы данных.
Транзакция - это распространение одного или нескольких изменений в базу данных. Например, если вы создаете запись, обновляете запись или удаляете запись из таблицы, то вы выполняете транзакцию с таблицей. Важно контролировать транзакции, чтобы гарантировать целостность данных и обрабатывать ошибки базы данных.
На практике вы объедините множество запросов PostgreSQL в группу и будете выполнять их все вместе как часть транзакции.
Свойства транзакций
Транзакции имеют следующие четыре стандартных свойства, обычно обозначаемых аббревиатурой ACID -
Atomicity- Гарантирует, что все операции в рамках единицы работы завершены успешно; в противном случае транзакция прерывается в момент сбоя, а предыдущие операции возвращаются в исходное состояние.
Consistency - Гарантирует, что база данных правильно меняет состояния после успешно зафиксированной транзакции.
Isolation - Позволяет транзакциям работать независимо и прозрачно друг для друга.
Durability - Гарантирует сохранение результата или эффекта зафиксированной транзакции в случае сбоя системы.
Контроль транзакций
Следующие команды используются для управления транзакциями -
BEGIN TRANSACTION - Начать сделку.
COMMIT - Чтобы сохранить изменения, в качестве альтернативы вы можете использовать END TRANSACTION команда.
ROLLBACK - Отменить изменения.
Команды управления транзакциями используются только с командами DML INSERT, UPDATE и DELETE. Их нельзя использовать при создании таблиц или их удалении, потому что эти операции автоматически фиксируются в базе данных.
Команда BEGIN TRANSACTION
Транзакции можно запустить с помощью BEGIN TRANSACTION или просто команды BEGIN. Такие транзакции обычно сохраняются до тех пор, пока не встретится следующая команда COMMIT или ROLLBACK. Но транзакция также ОТКАТИТСЯ, если база данных закрывается или возникает ошибка.
Ниже приведен простой синтаксис для начала транзакции:
BEGIN;
or
BEGIN TRANSACTION;
Команда COMMIT
Команда COMMIT - это транзакционная команда, используемая для сохранения изменений, вызванных транзакцией, в базе данных.
Команда COMMIT сохраняет все транзакции в базе данных с момента последней команды COMMIT или ROLLBACK.
Синтаксис команды COMMIT следующий:
COMMIT;
or
END TRANSACTION;
Команда ROLLBACK
Команда ROLLBACK - это транзакционная команда, используемая для отмены транзакций, которые еще не были сохранены в базе данных.
Команду ROLLBACK можно использовать только для отмены транзакций с момента выполнения последней команды COMMIT или ROLLBACK.
Синтаксис команды ROLLBACK следующий:
ROLLBACK;
пример
Учтите, что в таблице КОМПАНИЯ есть следующие записи:
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;
Если вы проверите, что в таблице КОМПАНИИ все еще есть следующие записи -
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;
Если вы проверите таблицу КОМПАНИИ, в ней все еще есть следующие записи:
id | name | age | address | salary
----+-------+-----+------------+--------
1 | Paul | 32 | California | 20000
3 | Teddy | 23 | Norway | 20000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall | 45000
7 | James | 24 | Houston | 10000
(5 rows)