Установка autocommit на false обычно не влияет на чтение, поэтому, если это то, что вы выполняете, не должно быть проблемой.
Что означает autocommit = false, заключается в том, что вы выполняете свои запросы (вставки, удаления, обновления) в транзакции, а это означает, что все они будут успешными (с фиксацией в конце) или сбой , и откат.
При вставке, обновлении или делать select ... for update
, некоторые строки будут заблокированы, и это труднее предсказать, поскольку она зависит от вашего двигателя, Mysql версии, уровень изоляции и т.д.
Если , например, autocommit = false, и двум пользователям необходимо одновременно обновлять одни и те же строки, тогда один будет заблокирован в ожидании завершения первого, с фиксацией или откатом.
Скажем, USER1 запускает обновление вашей базы данных, которое будет нацелено на 10 строк.
Вы начинаете транзакцию, сделать обновление, сделать несколько больше запросов ...
До фиксации/отката, ПОЛЬЗОВАТЕЛЬ2 вызывает то же самое обновление или обновление, которое будет предназначаться для одного или более из те же строки, что и USER1 обновляется.
ПОЛЬЗОВАТЕЛЬ2 будет заблокирован, ожидая USER1 либо фиксации или отката, до того, как обновление может быть выполнено.
Один из способов тестирования заключается в открытии двух разных подключений к базе данных, например, через командную строку или другого клиента и имитации этого поведения. Установите autocommit на false, сделайте обновление на одном клиенте, сделайте то же самое на втором, и увидите, что он зависает там до тех пор, пока вы не совершите или откатите первый клиент.
Этот метод может быть очень удобным, чтобы помочь вам понять, что происходит за кулисами.
Но кто отвечает за настройку уровня изоляции транзакций по умолчанию? Может быть, выбранный разъем db? (этот вопрос был для другого комментария, который был удален) – cahen