SQL Transaktsioonid
Основные концепции транзакции описываются аббревиатурой ACID –
- Atomicity – Атомарность
Целостность операции, выполняется полностью или совсем не выполняется. - Consistency – Согласованность
СУБД при работе с транзакциями согласованы между собой - Isolation – Изолированность
Каждая транзакция должна быть изолирована от других, т.е. её результат не должен зависеть от выполнения других. На практике, изолированность крайне труднодостижимая вещь, поэтому здесь вводится понятие “уровни изолированности”. - Durability – Долговечность
При сбое системы, транзакция не должна исчезнуть.
Transaktsiooni Haldumine
- COMMIT
Сохраняет изменения - ROLLBACK
Откатывает (отменяет) изменения - SAVEPOINT
Создаёт точку к которой группа транзакций может откатиться - SET TRANSACTION
Размещает имя транзакции.
Transaktsioonid SQL Serveris






Transaktsioonid XAMPPis




ROLLBACK;

SAVEPOINT




Ülesanne
Lülitame autocommit välja, nüüd me peame COMMIT teha et transaktsiooni teha.
SET autocommit=0;
create table developer
(id int primary key, NAME varchar(25), SPECIALTY varchar(25), EXPERIENCE int, SALARY int);
insert into developer(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);
Kustutame kõik arendajad kelle SPECIALTY on C++, ja võtame seda tagasi.
begin transaction;
delete from developer where SPECIALTY = 'C++';
rollback;

Video Konspekt
hinne 5 – https://www.youtube.com/watch?v=shkt9Z5Gz-U
create table tblProduct(
ProductId int not null primary key,
Name varchar(40),
UnitPrice int,
QtyAvailable int
);
insert into tblProduct(ProductId, Name, UnitPrice, QtyAvailable) VALUES
(1, 'Laptops', 2340, 100),
(2, 'Desktops', 3467, 20);
Select * from tblProduct;

Muudame 1 Product ja paneme QtyAvailable 200

Võtame tagasi

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');
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');
Nüüd meil on 2 uud tabelid, ja sellel on viga London nimega.

Kirjutame protseduur, mis parandab linna nimi, ja kasutame transaktsioonid ja TRY CATCH et veod tabada.
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
Print 'Transaction Committed'
End Try
Begin Catch
Rollback Transaction
Print 'Transaction Rolled Back'
End Catch
End

Muudame see protseduur ja teeme vigu meelega.
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
Print 'Transaction Committed';
End Try
Begin Catch
Rollback Transaction
Print 'Transaction Rolled Back';
End Catch
End

Näitame et kaks muudatused oli tagastatud.
