Основные концепции транзакции описываются аббревиатурой ACID –
- Atomicity – Атомарность (Транзакция выполняется как единое целое — либо все её операции выполняются, либо ни одна.)
Пример: Вы переводите деньги с одного счёта на другой, транзакция включает списание с одного и зачисление на другой. Если произойдёт сбой после списания, но до зачисления — операция будет отменена полностью, чтобы не потерялись деньги.
- Consistency – Согласованность (После завершения транзакции база данных остаётся в корректном, согласованном состоянии.)
Пример: Если база данных содержит правило, что сумма всех счетов должна быть равна 1000, то после любой транзакции это правило должно соблюдаться.
- Isolation – Изолированность (Параллельные транзакции не мешают друг другу и не влияют на промежуточные результаты.)
Пример: Если два пользователя одновременно покупают последний товар, система должна обрабатывать заказы так, будто они выполняются по очереди, чтобы избежать двойной продажи.
- Durability – Долговечность (После завершения транзакции её результат сохраняется в базе данных даже при сбое (например, отключении питания.))
Salvestame transaktsiooni

BEGIN transaction;
INSERT INTO t(id, s) VALUES (4, 'fourth')
SELECT * FROM t
Kustutame 1.rida ja võtame tagasi

BEGIN Transaction
DELETE FROM t WHERE id=1
SELECT * FROM t
ROLLBACK
SELECT * FROM t
Uuendame terve tabeli ja si=5 ja võtame tagasi

BEGIN Transaction
UPDATE t SET si = 5
SELECT * FROM t
ROLLBACK
SELECT * FROM t
XAMPP


START Transaction;
DELETE FROM t WHERE id=1;
SELECT * FROM t;
ROLLBACK;
SELECT * FROM t;



START Transaction;
SAVEPOINT SP1;
SELECT * FROM t;
UPDATE t SET si = 5;
SELECT * FROM t;
ROLLBACK TO SAVEPOINT SP1;
SELECT * FROM t
Ulesanne
Управление транзакциями
Для управления транзакциями используются следующие команды:
- COMMIT
Сохраняет изменения - ROLLBACK
Откатывает (отменяет) изменения - SAVEPOINT
Создаёт точку к которой группа транзакций может откатиться - SET TRANSACTION
Размещает имя транзакции.
- Ulesanne
Loo uus tabeli developers
CREATE TABLE developers (
ID INT PRIMARY KEY,
NAME VARCHAR(255),
SPECIALTY VARCHAR(255),
EXPERIENCE INT,
SALARY INT
);
INSERT INTO developers (ID, NAME, SPECIALTY, EXPERIENCE, SALARY) VALUES
(1, 'Eugene Suleimanov', 'Java', 2, 2500),
(2, 'Peter Romanenko', 'Java', 3, 3500),
(3, 'Andrei Komarov', 'C++', 3, 2500),
(4, 'Konstantin Geiko', 'C#', 2, 2000),
(5, 'Asya Suleimanova', 'UI/UX', 2, 1800),
(7, 'Ivan Ivanov', 'C#', 1, 900),
(8, 'Ludmila Geiko', 'UI/UX', 2, 1800);

Kasutame kõik inimesed kus SPECIALITY = C++
DELETE FROM developers WHERE SPECIALTY = 'C++';
COMMIT;

Muudatuse tagasipööramine
ROLLBACK;

Loo SAVEPOINT ja kasutame developers kus ID = 7,6,5
SAVEPOINT SP1;
DELETE FROM developers WHERE ID = 7;
DELETE FROM developers WHERE ID = 6;
DELETE FROM developers WHERE ID = 5;

Muudatuse tagasipööramine SAVEPOINT pärast
ROLLBACK TO SP1;

Kasutame SAVEPOINT
RELEASE SAVEPOINT SP1;
Funktsioon tehingu algatamiseks andmebaasis
SET TRANSACTION READ ONLY;
Funktsioon andmete kirjutamiseks andmebaasi
SET TRANSACTION READ WRITE;
2. Ulesanne
1.st example

Create Procedure spUpdateAddress
as
Begin
Begin Try
Begin Transaction
Update tblMailingAddress set City = 'LONDON'
where AddressId = 1 and EmployeeNumber = 101
Update tblPhysicalAddress set City = 'LONDON'
where AddressId = 1 and EmployeeNumber = 101
Commit Transaction
End Try
Begin Catch
Rollback Transaction
End Catch
End
EXEC spUpdateAddress
2.nd example



Alter Procedure spUpdateAddress
as
Begin
Begin Try
Begin Transaction
Update tblMailingAddress set City = 'LONDON1'
where AddressId = 1 and EmployeeNumber = 101
Update tblPhysicalAddress set City = 'LONDON LONDON'
where AddressId = 1 and EmployeeNumber = 101
Commit Transaction
End Try
Begin Catch
Rollback Transaction
End Catch
End
EXEC spUpdateAddress

