Атомарность

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

  • Atomicity – Атомарность
  • Consistency – Согласованность
  • Isolation – Изолированность
  • Durability – Долговечность

гарантирует, что любая транзакция будет зафиксирована только целиком (полностью). Если одна из операций в последовательности не будет выполнена, то вся транзакция будет отменена. Тут вводится понятие “отката” (rollback). Т.е. внутри последовательности будут происходить определённые изменения, но по итогу все они будут отменены (“откачены”) и по итогу пользователь не увидит никаких изменений.

Согласованность

Согласованность означает, что любая завершённая транзакция (транзакция, которая достигла завершения транзакции – end of transaction) фиксирует только допустимые результаты. Например, при переводе денег с одного счёта на другой, в случае, если деньги ушли с одного счёта, они должны прийти на другой (это и есть согласованность системы). Списание и зачисление  – это две разные транзакции, поэтому первая транзакция пройдёт без ошибок, а второй просто не будет. Именно поэтому крайне важно учитывать это свойство и поддерживать баланс системы.

Изолированность

Каждая транзакция должна быть изолирована от других, т.е. её результат не должен зависеть от выполнения других параллельных транзакций. На практике, изолированность крайне труднодостижимая вещь, поэтому здесь вводится понятие “уровни изолированности” (транзакция изолируется не полностью).

Долговечность

Эта концепция гарантирует, что если мы получили подтверждение о выполнении транзакции, то изменения, вызванные этой транзакцией не должны быть отменены из-за сбоя системы (например, отключение электропитания).

create database transactions
use transactions

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

--tagasi võtmine
ROLLBACK;


--salvestame transactions
begin Transaction;
insert into T(id, s) values (4,'fourth');
select *from t

begin transaction;
delete from t where id=1;
select * from t;
rollback;
select * from t;
begin transaction 
update T set si=5;
select *from t;
rollback
select * from t;

ülesanne

SQL

Salvestatud protseduuri loomine koos tehinguga

sCREATE PROCEDURE UpdateMyTable
AS
BEGIN
  BEGIN TRY
    BEGIN TRANSACTION
      UPDATE T SET s = 'updated_first' WHERE id = 1;
      UPDATE T SET s = 'updated_second' WHERE id = 2;
    COMMIT TRANSACTION
  END TRY
  BEGIN CATCH
    ROLLBACK TRANSACTION
  END CATCH
END

Videoallikas:

Video pealkiri: SQL Server Transactions and Error Handling
Link: https://www.youtube.com/watch?v=5ZdVLFUZyRs

XAMPP