SQL transaktsioonid

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

Транзакция – это распространение изменений в БД. Например, если мы создаём, изменяем или удаляем запись, то мы выполняем транзакцию. Крайне важно контролировать транзакции для гарантирования.

Основные концепции транзакции описываются аббревиатурой ACID

  • Atomicity – Атомарность
  • Consistency – Согласованность
  • Isolation – Изолированность
  • Durability – Долговечность

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

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

  • COMMIT
    Сохраняет изменения
  • ROLLBACK
    Откатывает (отменяет) изменения
  • SAVEPOINT
    Создаёт точку к которой группа транзакций может откатиться
  • SET TRANSACTION
    Размещает имя транзакции.

Команды управление транзакциями используются только для DML команд: INSERT, UPDATE, DELETE. Они не могут быть использованы во время создания, изменения или удаления таблицы.

Пример Транзакции в SQL:

create database transaktionSokhan;
use transaktionSokhan;

CReate table T(
id int not null primary key,
s varchar (40),
si smallint);

insert into T(id, s) Values (1, ‘first’);
insert into T(id, s) Values (2, ‘second’);
insert into T(id, s) Values (3, ‘third’);
select * from T;
— rollback bez nachala tranzakcii
ROLLBACK;
–nachalo tranzakcii
begin Transaction;
insert into T(id, s) Values (4, ‘fourth’);
select * from T;

–otkat tranzakcii
ROLLBACK;
select * from T;

–otkat udalenija
begin Transaction;
Delete from T where id=1;
select * from T;
ROLLBACK;
select * from T;

— otkat obnovlenija
begin Transaction;
update T SET si=3 where id=1;
select * from T;
ROLLBACK;
select * from T;

Задание №1. выполнение задания в XAMPP

Выполнить пример со следующей страницы https://proselyte.net/tutorials/sql/sql-transactions/

— отключаем автоматическое выполнение транзакций

SET autocommit=0;

— создаем и заполняем таблицу developers данными

START TRANSACTION;
SELECT * FROM developers;
DELETE FROM developers
WHERE SPECIALTY = ‘C++’;
COMMIT;
SELECT * FROM developers;

— Производится удаление

— Теперь попробуем выполнить команду ROLLBACK:
Увы в XAMPP команда не работает

— Теперь постараемся разобраться с SAVEPOINT.

SAVEPOINT SP1;

— Теперь выполним следующие запросы:

DELETE FROM developers WHERE ID = 7;

DELETE FROM developers WHERE ID = 6;

DELETE FROM developers WHERE ID = 5;

— На данный момент наша таблица содержит следующие записи:

— Теперь мы вернёмся к точке сохранения SP1 с помощью команды:

ROLLBACK TO SP1;

— Теперь, когда нам больше не нужна данная точка сохранения, мы можем её освободить:

RELEASE SAVEPOINT SP1;
SELECT * FROM developers;

— В завершение мы рассмотрим команду SET TRANSACTION, которая используется для того, чтобы инициировать транзакцию БД. Данная команда, позволяет нам определить характеристики транзакции.

SET TRANSACTION READ ONLY;
SELECT * FROM developers;

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

SET TRANSACTION READ WRITE;
SELECT * FROM `developers;

Задание №2. выполнение задания в SQL Server

SQL Server – найти на youtube.com видео относительно SQL транзакции и применить его к своей БД.

create table person(
id int not null primary key,
name varchar (50) not null
)

insert into person values (101,’Akash’)
insert into person values (102,’Samir’)

select * from person;

— Выполняем команду rollback;

— Начинаем транзакцию

begin transaction
insert into person values (103,’Hasan’)
select * from person;

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

rollback;
select * from person;

— добавление транзакции

begin transaction
insert into person values (103,’Hasan’)
commit;

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

rollback;
select * from person;

— Обновление данных с транзакцией

begin transaction
update person set name=’Sima’ where id=103;
select * from person;

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

rollback;
select * from person;

— Проводим сохранение транзакции sav1

begin transaction
delete person where id=103
save transaction sav1
select * from person;

— Проводим сохранение транзакции sav2

begin transaction
insert into person values (105,’Hasan’)
insert into person values (106,’Hasan’)
insert into person values (107,’Hasan’)
save transaction sav2
select * from person;

— Откат транзакции до сохранения sav1

rollback transaction sav1;
commit;
select * from person;