Ну, ACID - это не модель, которую вы можете реализовать, а набор правил, которым должен соответствовать сервер базы данных, чтобы иметь возможность безопасно обрабатывать транзакции.
MySQL не является сервером баз данных, совместимым с ACID, но если вы используете для хранения таблиц механизм хранения InnoDB (или лучше в качестве механизма хранения по умолчанию для сервера баз данных, задав для параметра default-storage-engine
значение InnoDB
(см. Параметр default-storage-engine )), вы сможете выполнять безопасные для транзакций операции с вашей базой данных.
Я рекомендую установить InnoDB в качестве механизма хранения по умолчанию, поскольку важно, чтобы не смешивал операции с таблицами с различными механизмами хранения в рамках одной транзакции (например, таблицы InnoDB и MyISAM). В противном случае вы можете повредить ваши данные, потому что вы не сможете откатить все свои операции, если откатите свою транзакцию.
Тем не менее, как вы гарантируете, что ваши операции совместимы с ACID? Просто с помощью сгруппируйте операции внутри транзакций , чтобы перейти из одного непротиворечивого состояния ваших данных в другое , и выполните фиксацию в конце, если все прошло хорошо, или откат, если что-то пошло не так. Для этого вам нужно сообщить серверу базы данных, когда ваша транзакция начинается с выдачи оператора START TRANSACTION
, а когда ваша транзакция заканчивается оператором COMMIT
или ROLLBACK
.
Обычно рекомендуется отключить режим автоматической фиксации в начале ваших сценариев с помощью команды SET AUTOCOMMIT=0
, хотя это не является обязательным, поскольку команда START TRANSACTION
фактически отключает режим автоматической фиксации.
Также имейте в виду, что некоторые операторы выдают неявную команду COMMIT
(в основном все операторы DDL и некоторые другие, см. Утверждения, которые вызывают неявный коммит ).
Возможно, вам также будет интересно узнать об отличиях от стандартного SQL в отношении обработки транзакций в MySQL Транзакции и атомарные операции .