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.