SQL transaktsioonid

Основные концепции транзакции описываются аббревиатурой 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