SQL transaktsioonid

Транзакция – это последовательность операций, выполняемых в логическом порядке пользователем, либо программой, которая работает с БД.

Транзакция – это распространение изменений в БД. Например, если мы создаём, изменяем или удаляем запись, то мы выполняем транзакцию. Крайне важно контролировать транзакции для гарантирования.

Основные концепции транзакции описываются аббревиатурой ACID 

  • Atomicity – Атомарность — гарантирует, что любая транзакция будет зафиксирована только целиком
  • Consistency – Согласованность — означает, что любая завершённая транзакция фиксирует только допустимые результаты
  • Isolation – Изолированность — Каждая транзакция должна быть изолирована от других
  • Durability – Долговечность — Эта концепция гарантирует, что если мы получили подтверждение о выполнении транзакции, то изменения, вызванные этой транзакцией не должны быть отменены из-за сбоя системы

ilma tehinguta on tehingut võimatu tagasi võtta

————————————————–

--loome transaktsiooni
begin TRANSAction;
insert into T (id, s) values (4, 'fourth');
select * from T;
--tagasi võtmine
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;

iseseisev töö

CREATE TABLE developers (
    ID INT PRIMARY KEY,
    NAME VARCHAR(50),
    SPECIALTY VARCHAR(20),
    EXPERIENCE INT,
    SALARY INT
);

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),
(7, 'Ivan Ivanov', 'C#', 1, 900),
(8, 'Ludmila Geiko', 'UI/UX', 2, 1800);

SELECT * FROM developers;
-- Tehingu algus
BEGIN TRANSACTION;

-- Kõigi spetsialiseerumisalaga arendajate eemaldamine'C++'
DELETE FROM developers 
WHERE SPECIALTY = 'C++';

-- Muudatuste rakendamine
COMMIT;
BEGIN TRANSACTION;

SAVE TRANSACTION SP1;

DELETE FROM developers WHERE ID = 7;

DELETE FROM developers WHERE ID = 6;

DELETE FROM developers WHERE ID = 5;

ROLLBACK TRANSACTION SP1;

COMMIT;

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

BEGIN TRANSACTION;

SELECT * FROM developers;

COMMIT;

—————————-

hindamisülesanne

hinne 5

создание и заполнение таблицы 

–уменьшение зарплаты женщин на 195–

–Уменьшение зарплаты мужчин на 50–


Письменая версия кода

создание и заполнение таблицы 

CREATE DATABASE Transactione;
use Transactione;

CREATE TABLE employees (
    e_id INT PRIMARY KEY,
    e_name VARCHAR(50),
    e_salary DECIMAL(10, 2),
    e_age INT,
    e_gender VARCHAR(10),
    e_dept VARCHAR(50)
);

INSERT INTO employees (e_id, e_name, e_salary, e_age, e_gender, e_dept) VALUES
(1, 'Sam', 95000, 45, 'Male', 'Operations'),
(2, 'Bob', 80000, 21, 'Male', 'Support'),
(3, 'Anne', 125000, 25, 'Female', 'Analytics'),
(4, 'Julia', 73000, 30, 'Female', 'Analytics'),
(5, 'Matt', 159000, 33, 'Male', 'Sales'),
(6, 'Jeff', 112000, 27, 'Male', 'Operations');

select * from employees
begin transaction
update employees set e_age=30 where e_name='Sam'
commit transaction 


select * from employees
BEGIN TRY
    BEGIN TRANSACTION
        UPDATE employees 
        SET e_salary = e_salary - 50 
        WHERE e_gender = 'Male';

        UPDATE employees 
        SET e_salary = e_salary - 195 
        WHERE e_gender = 'Female';

    COMMIT TRANSACTION
    PRINT 'Transaction committed';
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION
    PRINT 'Transaction rolled back';
END CATCH;

select * from employees

————————————————————————–

hindamisülesanne

hinne 5

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')
------------------------------------
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

-------------------------------------
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
-----------------------------------