Транзакция – это распространение изменений в БД. Например, если мы создаём, изменяем или удаляем запись, то мы выполняем транзакцию. Крайне важно контролировать транзакции для гарантирования.
Основные концепции транзакции описываются аббревиатурой ACID –
- Atomicity – Атомарность
- Consistency – Согласованность
- Isolation – Изолированность
- Durability – Долговечность
Атомарность
гарантирует, что любая транзакция будет зафиксирована только целиком (полностью). Если одна из операций в последовательности не будет выполнена, то вся транзакция будет отменена. Тут вводится понятие “отката” (rollback). Т.е. внутри последовательности будут происходить определённые изменения, но по итогу все они будут отменены (“откачены”) и по итогу пользователь не увидит никаких изменений.
Согласованность
Согласованность означает, что любая завершённая транзакция (транзакция, которая достигла завершения транзакции – end of transaction) фиксирует только допустимые результаты. Например, при переводе денег с одного счёта на другой, в случае, если деньги ушли с одного счёта, они должны прийти на другой (это и есть согласованность системы). Списание и зачисление – это две разные транзакции, поэтому первая транзакция пройдёт без ошибок, а второй просто не будет. Именно поэтому крайне важно учитывать это свойство и поддерживать баланс системы.
Изолированность
Каждая транзакция должна быть изолирована от других, т.е. её результат не должен зависеть от выполнения других параллельных транзакций. На практике, изолированность крайне труднодостижимая вещь, поэтому здесь вводится понятие “уровни изолированности” (транзакция изолируется не полностью).
Долговечность
Эта концепция гарантирует, что если мы получили подтверждение о выполнении транзакции, то изменения, вызванные этой транзакцией не должны быть отменены из-за сбоя системы (например, отключение электропитания).



transaction mis salvestab uuendamine ja votab tagasi:

xxamp:
start transaction;
SAVEPOINT sp1;
select * from t;
update t set si = 5;
select * from t;
rollback to savepoint sp1;
select * from t;

Ülesanne transaktsioonid
valisin video 5
Transaction Isolation Levels
Kasutame sama tabelit T:

Luuame transaction kasutades UPDATE:
begin transaction;
update T set si = 5;
T@htis!! -> Me ei pane COMMIT; voi ROLLBACK;. Ehk muudatused veel ei toota ja transaction on veel toos ja on “avatud”.
Kui keegi teine, n@iteks, avab uus QUERY ta ei saa n@ha muudatused, sest nad ei ole kinnitatud ja andmed on LOCKirud. Aga ta saab teha seda:

Tavaliselt SQL serveris on default Transaction Isolation Level on READ COMMITED, seeparast ei saa kasutada andmeid voi n@ha muutatuseid kui transaction on veel uncommitted. Kui muudame Isolation Level siis saame n@ha uncommitted muudatused.
XXAMP
SELECT * FROM T;
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
START TRANSACTION;
UPDATE T SET si = 5;
SELECT * FROM T;
ROLLBACK;
