MySQL не волнует, PHP это или Ruby. Да , есть потенциальные проблемы с одновременным доступом нескольких клиентов к базе данных . много можно ошибиться.
Всего один случайный пример:
Клиент 1 намеревается а) вычесть 10 из целого числа column_x (= 10), а затем b) добавить эти 10 к целому числу column_y.
Представьте, что Клиент 1 выполняется с шагом а), но прежде чем ему удастся выполнить б), приходит Клиент 2, намеревающийся что-то сделать, только если значение column_x или column_y положительное. И по ошибке ничего не делает, поскольку 10 еще не прибыл в column_y.
По сути, вы получаете все проблемы нескольких потоков выполнения с общим состоянием .
Для решения таких проблем существует транзакций . MySQL предоставляет несколько уровней изоляции транзакций , которые зависят от механизма хранения ваших таблиц.
Таким образом, все изменения (и чтения для REPEATABLE READ
& SERIALIZABLE
уровня изоляции) должны выполняться внутри транзакции базы данных, начиная с START TRANSACTION
и заканчивая COMMIT
оператором SQL. Если в середине вашей процедуры возникает проблема, и вы не можете завершить транзакцию в целом, выполните ROLLBACK
, чтобы отменить все изменения, сделанные после вызова START TRANSACTION
.