Транзакция — это последовательная группа операций манипулирования базой данных, которая выполняется так, как если бы это была одна единица работы. Другими словами, транзакция никогда не будет завершена, если каждая отдельная операция в группе не будет успешной. Если какая-либо операция в транзакции завершится неудачей, вся транзакция будет неудачной.
Практически вы объедините много 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 , но это зависит от вашей установки, если он поддерживает эти два типа.