tretstoun70
12.12.2016 - 12:38
Здравствуйте,
правильно ли работает транзакция или нет - я ввожу такие инструкции в окно запросов в 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
12.12.2016 - 15:06
Ну дык автокоммит же 0.
_____________
Безвозмездно помогаю только тем, кто сам пытается что-то сделать. Остальным за WMR
Даже если там 10 строк кода!
Даже если мне это ничего не стоит!
Даже если вы нуб!
walerus
12.12.2016 - 15:23
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
13.12.2016 - 10:36
walerus,
да, если так записывать, то всё работает. Просто интересно можно ли записывать ряд команд, потом нажимать ok, потом снова записать ряд команд и т.д. А потом подтвердить всё с помощью команды COMMIT - выходит, что нет.
tretstoun70
13.12.2016 - 10:38
Думал, что это ошибка.
AllesKlar
13.12.2016 - 23:31
Цитата (tretstoun70 @ 13.12.2016 - 08:36) |
walerus,
да, если так записывать, то всё работает. Просто интересно можно ли записывать ряд команд, потом нажимать ok, потом снова записать ряд команд и т.д. А потом подтвердить всё с помощью команды COMMIT - выходит, что нет. |
А смысл?
Смысл транзакции - "всё или ничего".
Если что-то нужно "записать", потом нажать, потом опять "записать", то сохраняй в сессии. А на последнем шаге пишешь в базу с транзакцией.
_____________
[продано копирайтерам]
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.