Транзакция – это последовательность операций, выполняемых в логическом порядке пользователем, либо программой, которая работает с БД.
Транзакция – это распространение изменений в БД. Например, если мы создаём, изменяем или удаляем запись, то мы выполняем транзакцию. Крайне важно контролировать транзакции для гарантирования.
Основные концепции транзакции описываются аббревиатурой ACID –
- Atomicity – Атомарность
- Consistency – Согласованность
- Isolation – Изолированность
- Durability – Долговечность
Для управления транзакциями используются следующие команды:
- COMMIT
Сохраняет изменения - ROLLBACK
Откатывает (отменяет) изменения - SAVEPOINT
Создаёт точку к которой группа транзакций может откатиться - SET TRANSACTION
Размещает имя транзакции.
Команды управление транзакциями используются только для DML команд: INSERT, UPDATE, DELETE. Они не могут быть использованы во время создания, изменения или удаления таблицы.
Любое успешное выполнение транзакции заканчивается командой COMMIT (фиксация), в то время как неудачное выполнение должно быть закончено командой ROLLBACK (откат), которая автоматически восстанавливает в базе данных все изменения, внесенные транзакцией.
SET AUTOCOMMIT = 1;
Значения 1 и ON эквивалентны, так же как и 0 и OFF.
После отправки запроса в режиме AUTOCOMMIT=0 вы оказываетесь в транзакции, пока не выполните команду COMMIT или ROLLBACK. После этого MySQL немедленно начинает новую транзакцию.
————————————————————————–
По умолчанию, в SQL Server сессии работают в режиме AUTOCOMMIT (автоматической фиксации) и использования явных транзакций, мы можем построить транзакции нескольких SQL-команд.
Тем не менее, весь сервер может быть настроен на использование и неявных транзакций. Но возможно использование неявных транзакций и только в одной сессии SQL, что можно настроить с помощью следующей команды SQL
SET IMPLICIT_TRANSACTIONS ON;
которая будет в силе до конца сессии, но при необходимости её можно будет выключить следующей командой:
SET IMPLICIT_TRANSACTIONS OFF;
create database transktiononTAR;
use transktiononTAR;
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;
rollback;
--lome transaktiooni
begin TRANSACTION;
insert into T(id, s) values (4, 'fourth');
select * from T;
rollback;
select * from T;

begin TRANSACTION;
insert into T(id, s) values (4, 'fourth');
select * from T;
rollback;
select * from T;

Hinne 5
Create Table tblMailingAddress
(
AddressId int NOT NULL primary key,
EmployeeNumber int,
HouseNumber varchar(50),
StreetAddress varchar(50),
City varchar(10),
PostalCode varchar(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 (2, 102, '#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
Select * from tblPhysicalAddress;
Select * from tblMailingAddress;

XAMPP
Create Table tblMailingAddress
(
AddressId int NOT NULL primary key,
EmployeeNumber int,
HouseNumber varchar(50),
StreetAddress varchar(50),
City varchar(10),
PostalCode varchar(50)
)

Insert into tblMailingAddress values (1, 101, '#10', 'King Street', 'Londoon', 'CR27DW')
