powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Транзакции
14 сообщений из 14, страница 1 из 1
Транзакции
    #39144767
Новичек82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я наверное чего-то не понимаю.
Мне нужно чтобы несколько операции сработали только когда все успешно прошли
к примеру

Вставка 1
Вставка 2
Изменение таблицы 1
Обновление 2


Я хочу чтобы если к примеру Обновление 2 не произошло ,например из-за ошибки , все откатилось назад, т.е. отменилось всё включая Вставку 1.

Я делаю так
START TRANSACTION;
Вставка 1
Вставка 2
Изменение таблицы 1
Обновление 2
COMMIT;


но не работает, всё равно вставки проходят ,когда ошибка в обновлении 2
...
Рейтинг: 0 / 0
Транзакции
    #39144773
Новичек82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Новичек82,У всех таблиц Innodb
...
Рейтинг: 0 / 0
Транзакции
    #39144777
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Новичек82 всё равно вставки проходят ,когда ошибка в обновлении 2 А после "ошибки в обновлении 2" вы делаете commit или rollback ?
...
Рейтинг: 0 / 0
Транзакции
    #39144780
Новичек82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,
Я хочу чтобы было автоматом, что если всё прошно нормально закоммитилось, если ошибка то откатилось.
у меня просто sql файлик, который запускается на разных машинах и конечно поведение не известно
...
Рейтинг: 0 / 0
Транзакции
    #39144796
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Новичек82,

Вообще, должно откатываться.
Показывайте конкретный скрипт и как его запускаете.
Если конкретный скрипт слишком большой или секретный, то показывайте тестовый, на котором проблема воспроизводится.
...
Рейтинг: 0 / 0
Транзакции
    #39146935
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftНовичек82,

Вообще, должно откатываться.
Показывайте конкретный скрипт и как его запускаете.
Если конкретный скрипт слишком большой или секретный, то показывайте тестовый, на котором проблема воспроизводится.

ну вообще-то не должно, откатится один оператор где была ошибка (или не выполнится),
чтобы откатилась все, нужно проверять ошибки и открывать транзакцию.
...
Рейтинг: 0 / 0
Транзакции
    #39147006
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivну вообще-то не должно http://dev.mysql.com/doc/refman/5.5/en/batch-mode.html If you want the script to continue even if some of the statements in it produce errors, you should use the --force command-line option.Поскольку топикстартер не показывает что и как он запускает, то, полагаю, что такой ключ не был указан.

К сожалению, не найду в доке описания поведения mysql при прекращении выполнении скрипта из-за ошибки.
Есть только один частный случай при обрыве коннекта. http://dev.mysql.com/doc/refman/5.5/en/mysql-tips.html Also, any current transaction rolls back.
...
Рейтинг: 0 / 0
Транзакции
    #39147077
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторК сожалению, не найду в доке описания поведения mysql при прекращении выполнении скрипта из-за ошибки.
Есть только один частный случай при обрыве коннекта.

скрипт ничем не отличается от всего остального. как напишешь так и работает. напишешь откат - откатит, не напишешь - не откатит.
...
Рейтинг: 0 / 0
Транзакции
    #39147086
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowавторК сожалению, не найду в доке описания поведения mysql при прекращении выполнении скрипта из-за ошибки.
Есть только один частный случай при обрыве коннекта.
скрипт ничем не отличается от всего остального. как напишешь так и работает. напишешь откат - откатит, не напишешь - не откатит.Обычно предполагается наоборот. Напишешь коммит - закоммитит. Не напишешь - не закоммитит.

Имхо, коммит, как потенциально более опасное действие, должен быть либо явным, либо почти явным (DDL и т.п.).
...
Рейтинг: 0 / 0
Транзакции
    #39147087
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторК сожалению, не найду в доке описания поведения mysql при прекращении выполнении скрипта из-за ошибки

http://dev.mysql.com/doc/refman/5.7/en/innodb-error-handling.html
...
Рейтинг: 0 / 0
Транзакции
    #39147088
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторОбычно предполагается наоборот. Напишешь коммит - закоммитит. Не напишешь - не закоммитит.


эм? мы точно ро MYSQL говорим? у него по умолчанию автокоммит включен.
...
Рейтинг: 0 / 0
Транзакции
    #39147092
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowавторОбычно предполагается наоборот. Напишешь коммит - закоммитит. Не напишешь - не закоммитит.эм? мы точно ро MYSQL говорим? у него по умолчанию автокоммит включен.Явное начало транзакции командой START TRANSACTION выключает автокоммит.

Кроме того:
http://dev.mysql.com/doc/refman/5.7/en/innodb-implicit-commit.html If a session that has autocommit disabled ends without explicitly committing the final transaction, MySQL rolls back that transaction.
...
Рейтинг: 0 / 0
Транзакции
    #39147098
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
странная фигня, но проверять влом. если совсем хочется можно через ErrorHandler делать.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
BEGIN

    DECLARE exit handler for sqlexception
      BEGIN
      ROLLBACK;
    END;

    DECLARE exit handler for sqlwarning
     BEGIN
     ROLLBACK;
    END;

    START TRANSACTION;



      [ERROR]

    COMMIT;

    END
...
Рейтинг: 0 / 0
Транзакции
    #39147103
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowесли совсем хочется можно через ErrorHandler делатьДа, похоже, это единственный надежный вариант.
Однако, в MySQL анонимных процедур нет, придется создавать обычную именованную процедуру и запускать ее.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Транзакции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]