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

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

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

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

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

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

  • Atomicity- обеспечивает успешное завершение всех операций внутри единицы работы. В противном случае транзакция прерывается в момент сбоя, а все предыдущие операции возвращаются в исходное состояние.

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

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

  • Durability - гарантирует, что результат или эффект зафиксированной транзакции сохранится в случае сбоя системы.

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

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

  • COMMIT - сохранить изменения.

  • ROLLBACK - откатить изменения.

  • SAVEPOINT - создает точки внутри групп транзакций, в которых выполняется ОТКАТ.

  • SET TRANSACTION - Добавляет имя в транзакцию.

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

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

Команда COMMIT

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

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

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

COMMIT;

Example

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

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Ниже приведен пример, который удаляет те записи из таблицы, у которых возраст = 25, а затем ЗАКЛЮЧАЕТ изменения в базе данных.

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

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

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Команда ROLLBACK

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

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

ROLLBACK;

Example

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

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Ниже приведен пример, в котором будут удалены те записи из таблицы, у которых есть возраст = 25, а затем ОТКАТ изменения в базе данных.

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

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

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Команда SAVEPOINT

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

Синтаксис команды SAVEPOINT показан ниже.

SAVEPOINT SAVEPOINT_NAME;

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

Синтаксис отката к SAVEPOINT показан ниже.

ROLLBACK TO SAVEPOINT_NAME;

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

Example

Рассмотрим таблицу CUSTOMERS со следующими записями.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 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 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 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 ];