Транзакции в MySQL при одновременных запросах
Прочитал про транзакции в MySQL и возник вопрос. Не будем ли происходить коллизий при одновременных запросах к БД разными пользователями? (Тип таблиц InnoDB)
Например: первый пользователь начинает транзакцию. Начинает выполнять запросы. В эту же секунду другой пользователь обращается к БД. У первого случился сбой и скрипт откатил изменения БД (ROLLBACK). Тогда изменения, сделанные вторым пользователем, тоже откатятся? Или БД следит за разделением транзакций разных подключений?
Ответы (1 шт):
В моей конфигурации сервера (возможно что и дефолтная), при изменении в разных транзакциях одной и той же записи, второй пользователь не получит ответ сервера на свое изменение пока первый пользователь не закроет свою транзакцию (неважно чем commit или rollback). Сразу после этого выполнится изменение второго пользователя.
Когда и второй пользователь закроет свою транзакцию (допустим commit'ом) то его изменения станут видны всем.
Если же первый будет тянуть с закрытием транзакции, то через таймаут второй получит ошибку "ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction".