Академический Документы
Профессиональный Документы
Культура Документы
1. Понятие транзакции.
2. Операторы транзакций.
3. Уровни изоляции.
4. Блокировки.
Понятие транзакции
• ALTER TABLE
• DROP DATABASE
• LOAD MASTER DATA
• SET AUTOCOMMIT = 1
• BEGIN
• DROP INDEX
• LOCK TABLES
• START TRANSACTION
• CREATE INDEX
• DROP TABLE
• RENAME TABLE
• TRUNCATE TABLE
Рассмотрим практический пример:
commit;
Представим,
что во время выполнения этой транзакции, другой
пользователь создал вторую параллельную
транзакцию и сделал запрос
Сможет ли он увидеть
вставленную запись даже тогда,
когда результаты первой
транзакции еще не
зафиксировались (не произошел
COMMIT)?
На этом уровне изоляции так же возможно чтение данных только зафиксированных транзакций.
Также на этом уровне отсутствует проблема «Неповторяемого чтения», то есть строки, которые
участвуют в выборке в рамках транзакции, блокируются и не могут быть изменены другими
параллельными транзакциями.
Но таблицы целиком не блокируются.
«Фантомное чтение» — это когда за время выполнения одной транзакции результат одних и тех же
выборок может меняться по причине того, что блокируется не вся таблица, а только те строки,
которые участвуют в выборке. Это означает, что параллельные транзакции могут вставлять строки
в таблицу, в которой совершается выборка, поэтому два запроса SELECT * FROM table могут дать
разный результат в разное время при вставке данных параллельными транзакциями.
COMMIT;
Но сами по себе транзакции — это еще
не все.
Аббревиатура ACID
расшифровывается как atomicity,
consistency, isolation и durability
(атомарность, согласованность,
изолированность и долговечность).
Согласованность
База данных всегда должна переходить из одного согласованного состояния в другое. В нашем примере
согласованность гарантирует, что сбой между строками 3 и 4 не приведет к исчезновению с текущего счета
200 долларов. Поскольку транзакция не будет подтверждена, ни одно из изменений не отразится в базе
данных.
Изолированность
Результаты транзакции обычно невидимы другим транзакциям, пока она не подтверждена. В нашем примере
это гарантирует, что, если программа суммирования остатков на банковских счетах будет запущена после
третьей строки перед четвертой, она по-прежнему увидит 200 долларов на текущем счете. Когда будем
рассматривать уровни изолированности, вы поймете, почему здесь сказано «обычно невидимы».
Долговечность (Устойчивость)
После подтверждения внесенные в ходе транзакции изменения становятся постоянными. Это значит, что они
должны быть записаны так, чтобы данные не потерялись при сбое системы. Долговечность, однако, является
несколько расплывчатой концепцией, поскольку у нее довольно много уровней.
Взаимоблокировки
Взаимоблокировка возникает тогда, когда две и более
транзакции взаимно удерживают и запрашивают блокировку
одних и тех же ресурсов, создавая циклическую зависимость.
START TRANSACTION;
COMMIT;
Транзакция № 2
START TRANSACTION;
COMMIT;
Ведение журнала транзакций