Does commit or rollback turn autocommit on impliclitly in PHP's mysqli?
Я делаю транзакции в PHP с классом mysqli и нахожу документацию autocommit() крайне неполной. Из примеров я делаю вывод, что установка false для автоматической фиксации неявно выполняет "начальную транзакцию". Это правильно? Что еще более важно, я не вижу, где autocommit сбрасывается до true, который я предполагаю, что это должно быть после завершения транзакции. Происходит ли это автоматически при вызове методов commit () или rollback()?
2 ответа
Он неявно не выполняет START TRANSACTION
потому что это выполняет специальные транзакции: http://dev.mysql.com/doc/refman/5.0/en/commit.html
С autocommit(false)
каждый раз, когда вы выполняете запрос на запись, вы должны COMMIT
чтобы он постоянно обновлялся на диске. Это верно для всех запросов в этом соединении с тех пор. С autocommit(true)
, если вы используете START TRANSACTION
, запустить обновление, запустить COMMIT
, а затем запустите другое обновление, оба обновления будут применены немедленно (т.е. без второго COMMIT
нужно).
autocommit
никогда не сбрасывается true
, но он устанавливается только для сеанса (сеанс MySQL, а не сеанс PHP).
Autocommit(FALSE) останется ложным для следующих запросов. После выполнения оператора commit автокоммит вернется к значению true. Не уверен в откат, если он делает то же самое. Я использовал этот способ в течение нескольких лет, и он всегда работал нормально.
Когда вам нужна последовательность в вашей БД, это один из способов.