Чат в Telegram
Новый комментарий

iluha22 13.08.2019 в 14:16

В MySQL не существует механизма вложенных транзакций. Одно соединение с БД — одна транзакция. Новая транзакция в пределах одного соединения может начаться только после завершения предыдущей.
Или я чего-то еще не знаю!?

ivashkevich 13.08.2019 в 19:35

Всё верно

jimholder37@gmail.com 02.08.2020 в 19:06

Если транзакция заканчивается словом "COMMIT", то получается если один запрос выполнился, а второй нет. То изменения после первого запроса остаются в силе?

ivashkevich 03.08.2020 в 02:39

Если второй не выполнился и это ошибка, значит эту ошибку надо обработать. Скорее всего в таком случае надо выполнить rollback

smolinav1987@yandex.ru 11.12.2020 в 09:38

BEGIN;
UPDATE `users` SET `name`="Иваны" WHERE id=2;
UPDATE `users` SET `id`= id/0 WHERE id=2;
COMMIT;

Подскажите пожалуйста, почему 1й update выполняется, если во втором явная ошибка деление на ноль?
ivashkevich 13.12.2020 в 07:33

А второй не выполняется?

smolinav1987@yandex.ru 13.12.2020 в 09:32

Второй не выполняется

ivashkevich 17.12.2020 в 17:45

Не знаю на какой версии у вас ошибка, но у меня только warning появился на втором запросе, при попытке задать в поле id значение NULL. Вместо него записался 0. Оба запроса выполнились успешно в рамках транзакции.

Deo 01.01.2021 в 16:48

Я вообще сделал без COMMIT;
Просто:

BEGIN;
UPDATE `users` SET `name`="Иваны" WHERE id=2;
UPDATE `users` SET `id`= id/0 WHERE id=2;

И всё, никакого подтверждения не потребовалось, имя изменилось, а деления на ноль не произошло...

ivashkevich 04.01.2021 в 07:01

id поменялся?

Deo 04.01.2021 в 15:10

Id не поменялся.
Обнаружил, что данная ошибка не возникает при работе в phpMyAdmin,
только при работе из консоли.
В phpMyAdmin зато нет возможности сделать ROLLBACK.

ivashkevich 04.01.2021 в 20:44

Забавно)

Логические задачи с собеседований