Транзакция – это последовательность операций, выполняемых в логическом порядке пользователем, либо программой, которая работает с БД.
Транзакция – это распространение изменений в БД. Например, если мы создаём, изменяем или удаляем запись, то мы выполняем транзакцию. Крайне важно контролировать транзакции для гарантирования.
Основные концепции транзакции описываются аббревиатурой 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
-----------------------------------