Основные концепции транзакции описываются аббревиатурой ACID –
- Atomicity – Атомарность (гарантирует, что любая транзакция будет зафиксирована только целиком)
- Consistency – Согласованность (означает, что любая завершённая транзакция фиксирует только допустимые результаты)
- Isolation – Изолированность (Каждая транзакция должна быть изолирована от других, т.е. её результат не должен зависеть от выполнения других параллельных транзакций.)
- Durability – Долговечность (Эта концепция гарантирует, что если мы получили подтверждение о выполнении транзакции, то изменения, вызванные этой транзакцией не должны быть отменены из-за сбоя системы)
https://habr.com/ru/companies/simbirsoft/articles/572540
create database transaktion;
use transaktion;
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;
--loome transaktsiooni
BEGIN TRANSACTION;
INSERT INTO T(id, s) VALUES (4, 'fourth');
SELECT * FROM T;
--tagasi vqtmine
ROLLBACK;
SELECT * FROM T;
--loome transaktsiooni 2
BEGIN TRANSACTION;
DELETE FROM T WHERE id=1;
SELECT * FROM T;
--tagasi võtmine
ROLLBACK;
SELECT * FROM T;
без начала транзакции невозможно ее откатить

lõi ja täitis tabeli
CREATE TABLE developers (
ID INT PRIMARY KEY,
NAME VARCHAR(255),
SPECIALTY VARCHAR(50),
EXPERIENCE INT,
SALARY DECIMAL(10, 2)
);
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),
(6, 'Ivan Ivanov', 'C#', 1, 900),
(7, 'Ludmila Geiko', 'UI/UX', 2, 1800);
Eemaldame kõik C++ arendajad
DELETE FROM developers
WHERE SPECIALTY = 'C++';
SELECT * FROM developers

Nüüd proovime ROLLBACKi käsku täita
ROLLBACK;
SELECT * FROM developers

Savepoint
SAVEPOINT SP1;
DELETE FROM developers WHERE ID = 7;
DELETE FROM developers WHERE ID = 6;
DELETE FROM developers WHERE ID = 5;

ROLLBACK TO SP1;

Videoülesanne: https://www.youtube.com/watch?v=shkt9Z5Gz-U
lõi tabel tblMailingAddress
Create Table tblMailingAddress
(
AddressId int NOT NULL primary key,
EmployeeNumber int,
HouseNumber nvarchar(50),
StreetAddress nvarchar(50),
City nvarchar(10),
PostalCode nvarchar(50)
)
Insert into tblMailingAddress values (1, 101, '#10', 'King Street', 'Londoon', 'CR27DW')
lõi tabel tblPhysicalAddress
Create Table tblPhysicalAddress
(
AddressId int NOT NULL primary key,
EmployeeNumber int,
HouseNumber nvarchar(50),
StreetAddress nvarchar(50),
City nvarchar(10),
PostalCode nvarchar(50)
)
Insert into tblPhysicalAddress values (1, 101, '#10', 'King Street', 'Londoon', 'CR27DW')
Lõi uus Procedure
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


Uus Procedure
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
Print 'Transaktion Committed'
End Try
Begin Catch
Rollback Transaction
Print 'Transaction Rolled Back'
End Catch
End


On vaja 300 sõna, sidrun sidrun sidrun sidrun. Sidrun sidrun sidrun sidrun sidrun sidrun. Sidrun sidrun sidrun sidrun sidrun. Sidrun sidrun sidrun sidrun sidrun sidrun sidrun. sidrun sidrun sidrun sidrun. Sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun. Sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun. Sidrun sidrun sidrun sidrun sidrun sidrun. Sidrun sidrun sidrun sidrun sidrun sidrun sidrun. Sidrun sidrun sidrun
sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun
sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun sidrun SQL SQL