Учебники

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

Транзакция — это последовательная группа операций манипулирования базой данных, которая выполняется так, как если бы это была одна единица работы. Другими словами, транзакция никогда не будет завершена, если каждая отдельная операция в группе не будет успешной. Если какая-либо операция в транзакции завершится неудачей, вся транзакция будет неудачной.

Практически вы объедините множество SQL-запросов в группу и выполните все их вместе как часть транзакции.

Свойства сделок

Транзакции имеют следующие четыре стандартных свойства, обычно обозначаемых аббревиатурой ACID

  • Атомарность — это гарантирует, что все операции внутри рабочего блока успешно завершены; в противном случае транзакция прерывается в точке сбоя, а предыдущие операции возвращаются в прежнее состояние.

  • Согласованность — это гарантирует, что база данных должным образом изменит состояния при успешно совершенной транзакции.

  • Изоляция — это позволяет транзакциям работать независимо друг от друга и быть прозрачными друг для друга.

  • Долговечность — это гарантирует, что результат или результат совершенной транзакции сохраняется в случае сбоя системы.

Атомарность — это гарантирует, что все операции внутри рабочего блока успешно завершены; в противном случае транзакция прерывается в точке сбоя, а предыдущие операции возвращаются в прежнее состояние.

Согласованность — это гарантирует, что база данных должным образом изменит состояния при успешно совершенной транзакции.

Изоляция — это позволяет транзакциям работать независимо друг от друга и быть прозрачными друг для друга.

Долговечность — это гарантирует, что результат или результат совершенной транзакции сохраняется в случае сбоя системы.

В MySQL транзакции начинаются с оператора BEGIN WORK и заканчиваются оператором COMMIT или ROLLBACK . Команды SQL между начальным и конечным операторами составляют основную часть транзакции.

COMMIT и ROLLBACK

Эти два ключевых слова Commit и Rollback в основном используются для транзакций MySQL.

  • Когда успешная транзакция завершена, необходимо выполнить команду COMMIT, чтобы изменения во всех задействованных таблицах вступили в силу.

  • Если происходит сбой, необходимо выполнить команду ROLLBACK для возврата каждой таблицы, на которую есть ссылка в транзакции, в ее предыдущее состояние.

Когда успешная транзакция завершена, необходимо выполнить команду COMMIT, чтобы изменения во всех задействованных таблицах вступили в силу.

Если происходит сбой, необходимо выполнить команду ROLLBACK для возврата каждой таблицы, на которую есть ссылка в транзакции, в ее предыдущее состояние.

Вы можете контролировать поведение транзакции, установив переменную сеанса AUTOCOMMIT . Если для AUTOCOMMIT задано значение 1 (по умолчанию), то каждый оператор SQL (внутри транзакции или нет) считается завершенной транзакцией и фиксируется по умолчанию после ее завершения.

Когда для AUTOCOMMIT установлено значение 0, с помощью команды SET AUTOCOMMIT = 0 последующая серия операторов действует как транзакция, и никакие действия не фиксируются, пока не будет выполнен явный оператор COMMIT.

Вы можете выполнить эти команды SQL в PHP с помощью функции mysql_query () .

Общий пример транзакции

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

Вы можете выполнить эти команды SQL в PHP с помощью функции mysql_query () .

  • Начните транзакцию, введя команду SQL BEGIN WORK .

  • Выполните одну или несколько команд SQL, таких как SELECT, INSERT, UPDATE или DELETE.

  • Проверьте, нет ли ошибок, и все ли соответствует вашему требованию.

  • Если есть какая-либо ошибка, введите команду ROLLBACK, в противном случае введите команду COMMIT.

Начните транзакцию, введя команду SQL BEGIN WORK .

Выполните одну или несколько команд SQL, таких как SELECT, INSERT, UPDATE или DELETE.

Проверьте, нет ли ошибок, и все ли соответствует вашему требованию.

Если есть какая-либо ошибка, введите команду ROLLBACK, в противном случае введите команду COMMIT.

Транзакционно-безопасные типы таблиц в MySQL

Вы не можете использовать транзакции напрямую, но для определенных исключений вы можете. Однако они не безопасны и не гарантированы. Если вы планируете использовать транзакции в программировании MySQL, то вам нужно создавать свои таблицы особым образом. Существует много типов таблиц, которые поддерживают транзакции, но наиболее популярной является InnoDB .

Поддержка таблиц InnoDB требует определенного параметра компиляции при компиляции MySQL из источника. Если ваша версия MySQL не поддерживает InnoDB, попросите интернет-провайдера создать версию MySQL с поддержкой типов таблиц InnoDB или загрузить и установить бинарный дистрибутив MySQL-Max для Windows или Linux / UNIX и работать с типом таблицы в среда разработки.

Если ваша установка MySQL поддерживает таблицы InnoDB, просто добавьте определение TYPE = InnoDB в оператор создания таблицы.

Например, следующий код создает таблицу InnoDB с именем tcount_tbl

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> create table tcount_tbl
   -> (
   -> tutorial_author varchar(40) NOT NULL,
   -> tutorial_count  INT
   -> ) TYPE = InnoDB ;
Query OK, 0 rows affected (0.05 sec)

Для получения более подробной информации о InnoDB, вы можете нажать на следующую ссылку — InnoDB

Вы можете использовать другие типы таблиц, такие как GEMINI или BDB , но это зависит от вашей установки, поддерживает ли она эти два типа таблиц или нет.