Учебники

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

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

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

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

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

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

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

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

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

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

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

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

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

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

COMMIT и ROLLBACK

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Если ваша установка MySQLi поддерживает таблицы InnoDB, просто добавьте определение TYPE = InnoDB в оператор создания таблицы. Например, следующий код создает таблицу InnoDB с именем tutorials_innodb —

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

mysql> use TUTORIALS;
Database changed

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

Проверьте следующую ссылку, чтобы узнать больше о — InnoDB

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