Поиск по сайту:
Лучше оправдать десять виновных, чем обвинить одного невинного (Екатерина II).

SQL — Транзакция

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5,00 из 5)
Загрузка...
23.04.2017
SQL - Транзакция

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

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

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

Свойства транзакций

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

  • Atomicity — гарантирует, что все операции в рамках единицы работы завершены успешно. В противном случае, транзакция прерывается в точке выхода из строя , и все предыдущие операции откатываются в прежнее состояние.
  • Consistency — гарантирует, что база данных правильно изменяет состояния на более успешное совершенные транзакции.
  • Isolation — позволяет транзакции работать независимо и прозрачно друг с другом.
  • Durability — гарантирует, что результат или эффект зафиксированной транзакции сохраняется в случае сбоя системы.

Управление транзакцией

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

  • COMMIT — для сохранения изменений.
  • ROLLBACK — откат изменений.
  • SAVEPOINT — создает точки внутри групп операций, которые следует откатить.
  • SET TRANSACTION — размещает имя транзакции.

Команды управления транзакциями

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

Команда COMMIT

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

Синтаксис команды COMMIT выглядит следующим образом:

COMMIT;

 

Пример

Рассмотрим таблицу клиентов, имеющих следующие записи:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Maxim    |  35 | Moscow    | 21000.00 |
|  2 | AndreyEx |  38 | Krasnodar | 55500.00 |
|  3 | Oleg     |  33 | Rostov    | 34000.00 |
|  4 | Masha    |  35 | Moscow    | 31500.00 |
|  5 | Ruslan   |  34 | Omsk      | 43000.00 |
|  6 | Dima     |  32 | SP        | 45000.00 |
|  7 | Roma     |  34 | SP        | 10000.00 |
+----+----------+-----+-----------+----------+

 

Ниже приведен пример, который удалит эти записи из таблицы, которые имеют возраст = 34, а затем зафиксировать изменения в базе данных.

SQL> DELETE FROM CUSTOMERS
   WHERE AGE = 34;
SQL> COMMIT;

 

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

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Maxim    |  35 | Moscow    | 21000.00 |
|  2 | AndreyEx |  38 | Krasnodar | 55500.00 |
|  3 | Oleg     |  33 | Rostov    | 34000.00 |
|  4 | Masha    |  35 | Moscow    | 31500.00 |
|  6 | Dima     |  32 | SP        | 45000.00 |
+----+----------+-----+-----------+----------+

Команда ROLLBACK

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

Синтаксис команды ROLLBACK выглядит следующим образом:

ROLLBACK;

 

Пример

Рассмотрим таблицу клиентов, имеющую следующие записи:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Maxim    |  35 | Moscow    | 21000.00 |
|  2 | AndreyEx |  38 | Krasnodar | 55500.00 |
|  3 | Oleg     |  33 | Rostov    | 34000.00 |
|  4 | Masha    |  35 | Moscow    | 31500.00 |
|  5 | Ruslan   |  34 | Omsk      | 43000.00 |
|  6 | Dima     |  32 | SP        | 45000.00 |
|  7 | Roma     |  34 | SP        | 10000.00 |
+----+----------+-----+-----------+----------+

 

Ниже приведен пример, который удалит эти записи из таблицы, которые имеют возраст = 34, а затем откатим изменения в базе данных.

SQL> DELETE FROM CUSTOMERS
   WHERE AGE = 34;
SQL> ROLLBACK;

 

Таким образом, операция удаления не будет влиять на таблицу и оператор SELECT покажет следующий результат:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Maxim    |  35 | Moscow    | 21000.00 |
|  2 | AndreyEx |  38 | Krasnodar | 55500.00 |
|  3 | Oleg     |  33 | Rostov    | 34000.00 |
|  4 | Masha    |  35 | Moscow    | 31500.00 |
|  5 | Ruslan   |  34 | Omsk      | 43000.00 |
|  6 | Dima     |  32 | SP        | 45000.00 |
|  7 | Roma     |  34 | SP        | 10000.00 |
+----+----------+-----+-----------+----------+

Команда SAVEPOINT

SAVEPOINT это точка в транзакции, когда вы можете откатить транзакцию до определенной точки без отката всех транзакций.

Синтаксис команды SAVEPOINT является таким, как показано ниже:

SAVEPOINT SAVEPOINT_NAME;

 

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

Синтаксис для отката SAVEPOINT является таким, как показано ниже:

ROLLBACK TO SAVEPOINT_NAME;

 

Ниже приведен пример, в котором вы собираетесь удалить три записи из таблицы Customers. Вы хотите создать SAVEPOINT перед каждым удалением, так что вы можете откатить к любому SAVEPOINT в любое время, чтобы вернуть соответствующие данные в исходное состояние.

Пример

Рассмотрим таблицу клиентов, имеющих следующие записи:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Maxim    |  35 | Moscow    | 21000.00 |
|  2 | AndreyEx |  38 | Krasnodar | 55500.00 |
|  3 | Oleg     |  33 | Rostov    | 34000.00 |
|  4 | Masha    |  35 | Moscow    | 31500.00 |
|  5 | Ruslan   |  34 | Omsk      | 43000.00 |
|  6 | Dima     |  32 | SP        | 45000.00 |
|  7 | Roma     |  34 | SP        | 10000.00 |
+----+----------+-----+-----------+----------+

 

Следующий блок кода содержит ряд операций.

SQL> SAVEPOINT SP1;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=1;
1 row deleted.
SQL> SAVEPOINT SP2;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=2;
1 row deleted.
SQL> SAVEPOINT SP3;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=3;
1 row deleted.

 

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

SQL> ROLLBACK TO SP2;
Rollback complete.

 

Обратите внимание на то, что только первое удаление имело место, так как вы откатили к SP2.

SQL> SELECT * FROM CUSTOMERS;
+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  2 | AndreyEx |  38 | Krasnodar | 55500.00 |
|  3 | Oleg     |  33 | Rostov    | 34000.00 |
|  4 | Masha    |  35 | Moscow    | 31500.00 |
|  5 | Ruslan   |  34 | Omsk      | 43000.00 |
|  6 | Dima     |  32 | SP        | 45000.00 |
|  7 | Roma     |  34 | SP        | 10000.00 |
+----+----------+-----+-----------+----------+
6 rows selected.

 

Команда RELEASE SAVEPOINT

Команда RELEASE SAVEPOINT используется для удаления SAVEPOINT, который вы создали.

Синтаксис команды RELEASE SAVEPOINT выглядит следующим образом.

RELEASE SAVEPOINT SAVEPOINT_NAME;

 

После того, как SAVEPOINT был опубликован, вы больше не можете использовать команду ROLLBACK, чтобы отменить транзакции, выполненные с момента последнего SAVEPOINT.

Команда SET TRANSACTION

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

Синтаксис команды SET TRANSACTION выглядит следующим образом.

SET TRANSACTION [ READ WRITE | READ ONLY ];

SQL - Транзакция

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Спасибо!

Теперь редакторы в курсе.