Атомарность – озночает что транзакция должна быть зафиксировано целеком
Основные концепции транзакции описываются аббревиатурой ACID –
- Atomicity -Атомарность – гарантирует, что любая транзакция будет зафиксирована только целиком
- Consistency – Согласованность означает, что любая завершённая транзакция (транзакция, которая достигла завершения транзакции – end of transaction) фиксирует только допустимые результаты.
- Isolation – Изолированность – Каждая транзакция должна быть изолирована от других, т.е. её результат не должен зависеть от выполнения других параллельных транзакций.
- Durability – Долговечность – Эта концепция гарантирует, что если мы получили подтверждение о выполнении транзакции, то изменения, вызванные этой транзакцией не должны быть отменены из-за сбоя системы (например, отключение электропитания).
Без начало транзакций невозможно сделать откат этой транзакций
ROLLBACK;

--loome transaktsiooni
begin transaction;
Insert into T(id,s) values(5,'Five');
select * from T;
--tagasi võtmine
ROLLBACK;
select * from T;

--loome transaktsiooni 2 DELETE
begin transaction;
delete from T where id=1
select * from T;
--tagasi võtmine
ROLLBACK;
select * from T;

Ülesanne transaktsioonid
Loome tabeli tblMailingAddress
Create Table tblMailingAddress
(
AddressId int NOT NULL primary key,
EmployeeNumber int,
HouseNumber nvarchar(50),
StreetAddress nvarchar(50),
City nvarchar(10),
PostalCode nvarchar(50)
)
Sisestame andmed
Insert into tblMailingAddress values (1, 101, '#10', 'King Street', 'Londoon', 'CR27DW')
Loome tabeli tblPhysicalAddress
Create Table tblPhysicalAddress
(
AddressId int NOT NULL primary key,
EmployeeNumber int,
HouseNumber nvarchar(50),
StreetAddress nvarchar(50),
City nvarchar(10),
PostalCode nvarchar(50)
)
Sisestame andmed
Insert into tblPhysicalAddress values (1, 101, '#10', 'King Street', 'Londoon', 'CR27DW')
Loome protseduri spUpdateAddress. Protseduur spUpdateAddress ajakohastab linna mõlemas tabelis LONDON. Kui see õnnestub, salvestatakse muudatused, vastasel juhul võetakse need tagasi.
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
Loome protseduuri spUpdateAddress. Protseduur ajakohastab mõlema tabeli linnad erinevatele väärtustele. Kui see õnnestub, salvestatakse muudatused, vastasel juhul võetakse need tagasi.
Alter Procedure spUpdateAddress
as
Begin
Begin Try
Begin Transaction
Update tblMailingAddress set City = 'LONDON12'
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
Kontroll
exec spUpdateAddress
select * from tblMailingAddress where AddressId = 1 and EmployeeNumber = 101
select * from tblPhysicalAddress where AddressId = 1 and EmployeeNumber = 101

Kasutatud video
https://www.youtube.com/watch?v=shkt9Z5Gz-U
MySQL – Выполнить пример со следующей страницы https://proselyte.net/tutorials/sql/sql-transactions
--Loome tabeli developers
Create table developers(
ID int not null identity(1,1) primary key,
NAME varchar(50),
SPECIALTY varchar(50),
EXPERIENCE SMALLINT not null,
SALARY int NOT null
);
insert into developers(NAME,SPECIALTY,EXPERIENCE,SALARY)
values('Eugene Suleimanov','Java',2,2500);
insert into developers(NAME,SPECIALTY,EXPERIENCE,SALARY)
values('Peter Romanenko','Java',3,3500);
insert into developers(NAME,SPECIALTY,EXPERIENCE,SALARY)
values('Andrei Komarov','C++',3,2500);
insert into developers(NAME,SPECIALTY,EXPERIENCE,SALARY)
values('Konstantin Geiko','C#',2,2000);
insert into developers(NAME,SPECIALTY,EXPERIENCE,SALARY)
values('Asya Suleimanova','UI/UX',2,1800);
insert into developers(NAME,SPECIALTY,EXPERIENCE,SALARY)
values('Ivan Ivanov','C#',1,900);
insert into developers(NAME,SPECIALTY,EXPERIENCE,SALARY)
VALUES('Ludmila Geiko','UI/UX',2,1800);
Teeme transaktsiooni
START TRANSACTION;
DELETE FROM developers
WHERE SPECIALTY = 'C++';
SELECT * from developers;
ROLLBACK;
SELECT * from developers;


Teeme transaktsiooni
START TRANSACTION;
DELETE FROM developers WHERE ID = 7;
DELETE FROM developers WHERE ID = 6;
DELETE FROM developers WHERE ID = 5;
SELECT * FROM developers;
ROLLBACK;
SELECT * FROM developers

