Содержание
Транзакция — это процесс, который выполняется либо полностью, либо не выполняется совсем. Это не часть базы данных, т.е. она может быть за пределами БД.
Свойства транзакции — ACID
ACID — это четыре обязательных свойства, по которым определяют, транзакция ли это. Т.е. если есть ACID, то это 100% транзакция.
- Atomicity (атомарность) — любая транзакция атомарна (неделима). Она может либо вся целиком выполнится, либо не выполнится вообще.
- Consistency (согласованность) — у любой бизнес-системы есть внутренние правила. Никакая транзакция не может нарушить эти правила. Что бы транзакция не делала, она не должна нарушать правила.
- Isolation (изоляция) — конкурирующие транзакции работают независимо друг от друга, они изолированы.
- Durability (продолжительность) — независимо от внешних факторов изменения, сделанные успешной транзакцией, останутся сохраненными.
Синтаксис транзакции
START TRANSACTION; //начало COMMIT; //подтверждение ROLLBACK; //отмена
Без подтверждения транзакции, она не будет законцена. Если транзакцию подтвердили, то отмена уже не сработает.
Установка уровня изоляции транзакции
Изолированность транзакций — это их слабая сторона. Можно одновременно провести несколько транзакций от одного лица, и если сервер сильно загружен, то он проведет несколько транзакций (например, зачисление денег на телефон по карте экспресс-оплаты).
В этом деле поможет применение разных уровней изоляции транзакций:
SET TRANSACTION ISOLATION LEVEL Read Uncommitted | Read Committed | Repeatable Read | Serializable //установить уровень изоляции транзакции
В теории есть 4 основных уровня изоляции:
- 0 — Read Uncommitted — чтение неподтвержденных данных. Т.е. здесь никакой изоляции нет. Любые изменения любой транзакции (даже неподтвержденной) видны всем остальным. Проблемы: грязные чтения, фантомы, неповторяемые чтения.
- 1 — Read Committed — вы видите все изменения в подтвержденных транзакциях (когда другой юзер нажал commit — подтвердить). Проблемы — неповторяемые чтения и фантомы.
- 2 — Repeatable Read — вы видите только изменения в своей транзакции. И пока вы не закончите свою транзакцию, изменения других транзакций не увидите. Пробблемы: фантомы. Этот уровень используется по умолчанию.
- 3 — Serializable — вы не видитие никаких изменений даже в своей транзакции. На практике такую изоляцию почти не применяют.