|
Транзакции! Нужен ли ROLLBACK при ошибке с закрытием подключения! (autocommit=0)
|
|||
---|---|---|---|
#18+
Перечитал кучу документации. Вроде бы всё просто: Код: sql 1. 2. 3. 4.
Так вот, во всех документациях, во всех online-справочниках по MySQL указано, что если во время транзакции произойдет ошибка, то транзакция сама по себе не откатится и нужно делать ROLLBACK, даже при autocommit=0. Видимо я чего-то не понимаю. Я говорю здесь о таком случае: Код: sql 1. 2. 3. 4. 5.
Внимание вопрос! Зачем делать ROLLBACK и почему при возникновении ошибки во время транзакции и последующем НЕвыполнении commit в php скрипте ввиду остановки работы скрипта ROLLBACK не происходит самостоятельно? Ведь согласно документации нужно делать commit чтобы зафиксировать транзакцию! А раз commit мы не делали (и данные на диске после разрыва соединения не изменятся), то зачем в документации написано делать ROLLBACK? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2019, 22:17 |
|
Транзакции! Нужен ли ROLLBACK при ошибке с закрытием подключения! (autocommit=0)
|
|||
---|---|---|---|
#18+
Павел Воробьевпочему при возникновении ошибки во время транзакции и последующем НЕвыполнении commit в php скрипте ввиду остановки работы скрипта ROLLBACK не происходит самостоятельно? Потому что остановка PHP скрипта не делает disconnect во время которого активные транзакции могли бы завершиться откатом. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2019, 13:36 |
|
Транзакции! Нужен ли ROLLBACK при ошибке с закрытием подключения! (autocommit=0)
|
|||
---|---|---|---|
#18+
Разрыв соединения с БД при остановке скрипта это и есть дисконнект. Неужели вы думаете что соединение продолжает висеть и чего-то ждать. Нет, оно так же завершается и со стороны MySQL и должно откатывать незакрытую транзакцию. Сегодня сам всё проверю, скорее всего документация врёт и никакой rollback не нужен иначе это бред. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2019, 17:03 |
|
Транзакции! Нужен ли ROLLBACK при ошибке с закрытием подключения! (autocommit=0)
|
|||
---|---|---|---|
#18+
Павел ВоробьевРазрыв соединения с БД при остановке скрипта это и есть дисконнект. Повторяю медленно: при остановке PHP скрипта соединение возвращается в глобальный пул, но не разрывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2019, 13:30 |
|
Транзакции! Нужен ли ROLLBACK при ошибке с закрытием подключения! (autocommit=0)
|
|||
---|---|---|---|
#18+
Павел Воробьевво всех online-справочниках по MySQL указано, что если во время транзакции произойдет ошибка, то транзакция сама по себе не откатится и нужно делать ROLLBACK, даже при autocommit=0. Правильно. Ошибка ЗАПРОСА не приводит к откату транзакции - хотя бы потому, что ошибка может быть ШТАТНЫМ событием транзакции. Павел ВоробьевЗачем делать ROLLBACK и почему при возникновении ошибки во время транзакции и последующем НЕвыполнении commit в php скрипте ввиду остановки работы скрипта ROLLBACK не происходит самостоятельно?А вот в этом случае откат будет выполнен автоматически - однако не по ошибке запроса, а по причине того, что разорвано соединение, начавшее транзакцию. В отличие от ошибки запроса, после которой в транзакции продолжается выполнение действий, разрыв подключения гарантирует, что более никакие действия через него не будут выполнены. А отсутствие коммита вызывает роллбэк. Что же до пула соединений PHP, про которые Dimitry Sibiryakov говорит, что они не разъединяются с сервером после освобождения на стороне PHP по причине остановки скрипта, то в этом случае (если Дмитрий прав) транзакция будет "висеть", пока соединение явно не завершится (скажем, соединение в пуле будет использовано для подключения к другому серверу или с другой учётной записью) или не произойдёт тайм-аут (MySQL не получит сигналов через это соединение в установленный срок). И только после завершения произойдёт роллбэк. Сколько при этом будут висеть блокировки и грязные данные - по всей видимости, рандом знает... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2019, 13:56 |
|
Транзакции! Нужен ли ROLLBACK при ошибке с закрытием подключения! (autocommit=0)
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovПавел ВоробьевРазрыв соединения с БД при остановке скрипта это и есть дисконнект. Повторяю медленно: при остановке PHP скрипта соединение возвращается в глобальный пул, но не разрывается. Только если при установлении соединения это попросите явно: https://www.php.net/manual/en/features.persistent-connections.php Если не просили persistent - то коннект будет закрыт при завершении скрипта. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2019, 14:53 |
|
Транзакции! Нужен ли ROLLBACK при ошибке с закрытием подключения! (autocommit=0)
|
|||
---|---|---|---|
#18+
авторПовторяю медленно: при остановке PHP скрипта соединение возвращается в глобальный пул, но не разрывается. так работают только постоянные соединения, которые по умолчанию выключены. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 12:06 |
|
|
start [/forum/topic.php?fid=47&fpage=33&tid=1829043]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 147ms |
0 / 0 |