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;
