транзакции в mysql

Транзакции в MySQL

Транзакция — это процесс, который выполняется либо полностью, либо не выполняется совсем. Это не часть базы данных, т.е. она может быть за пределами БД.

Свойства транзакции — 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 — вы не видитие никаких изменений даже в своей транзакции. На практике такую изоляцию почти не применяют.



Добавить комментарий

Ваш e-mail не будет опубликован.