[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Правильно ли работает транзакция
tretstoun70
Здравствуйте,

правильно ли работает транзакция или нет - я ввожу такие инструкции в окно запросов в mysql:

SET AUTOCOMMIT=0;
START TRANSACTION;
UPDATE user_account SET allsum=allsum + 1000 WHERE id='1';
UPDATE user_account SET allsum=allsum - 1000 WHERE id='2';

Ошибок нет, если нажать ok - команды не выполнятся. Если потом открыть окно запросов и ввести команду COMMIT, то запросы всё равно не выполнятся. Т.е. запросы не сохраняются.

Но если ввести команду COMMIT в этом же окне после запросов, то они выполнятся.



TranceIT
Ну дык автокоммит же 0.

_____________
Безвозмездно помогаю только тем, кто сам пытается что-то сделать.

Остальным за WMR
Даже если там 10 строк кода!
Даже если мне это ничего не стоит!
Даже если вы нуб!

user posted image
walerus
tretstoun70
цитата
Цитата
6.7.1. Синтаксис команд BEGIN/COMMIT/ROLLBACK

По умолчанию MySQL работает в режиме autocommit. Это означает, что при выполнении обновления данных MySQL будет сразу записывать обновленные данные на диск.
При использовании таблиц, поддерживающих транзакции (таких как InnoDB, BDB), в MySQL можно отключить режим autocommit при помощи следующей команды:
SET AUTOCOMMIT=0
После этого необходимо применить команду COMMIT для записи изменений на диск или команду ROLLBACK, которая позволяет игнорировать изменения, произведенные с начала данной транзакции.
Если необходимо переключиться из режима AUTOCOMMIT только для выполнения одной последовательности команд, то для этого можно использовать команду START TRANSACTION или BEGIN или BEGIN WORK:
START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summmary=@A WHERE type=1;
COMMIT;
из которой следует что Ваш код должен быть таким:
SET AUTOCOMMIT=0;
START TRANSACTION;
UPDATE user_account SET allsum=allsum + 1000 WHERE id='1';
UPDATE user_account SET allsum=allsum - 1000 WHERE id='2';
COMMIT;
tretstoun70
walerus,

да, если так записывать, то всё работает. Просто интересно можно ли записывать ряд команд, потом нажимать ok, потом снова записать ряд команд и т.д. А потом подтвердить всё с помощью команды COMMIT - выходит, что нет.
tretstoun70
Думал, что это ошибка.
AllesKlar
Цитата (tretstoun70 @ 13.12.2016 - 08:36)
walerus,

да, если так записывать, то всё работает. Просто интересно можно ли записывать ряд команд, потом нажимать ok, потом снова записать ряд команд и т.д. А потом подтвердить всё с помощью команды COMMIT - выходит, что нет.

А смысл?
Смысл транзакции - "всё или ничего".

Если что-то нужно "записать", потом нажать, потом опять "записать", то сохраняй в сессии. А на последнем шаге пишешь в базу с транзакцией.

_____________
[продано копирайтерам]
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.