Учебники

SQL — транзакции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • SET TRANSACTION — помещает имя в транзакцию.

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

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

SAVEPOINT — создает точки внутри групп транзакций, в которых выполняется ROLLBACK.

SET TRANSACTION — помещает имя в транзакцию.

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

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

Команда COMMIT

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

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

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

COMMIT;

пример

Рассмотрим таблицу 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;

пример

Рассмотрим таблицу 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, чтобы вернуть соответствующие данные в исходное состояние.

пример

Рассмотрим таблицу 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 следующий.