2016-08-01 4 views
0

Я пытаюсь выпустить следующее в MySQL через node.js (используя библиотеку https://github.com/mysqljs/mysql).Откат MySQL в node.js

Я использую API транзакций для отката при возникновении ошибки, но он не откатывается. Затем я попытался упростить задачу и поставить его непосредственно в PhpMyAdmin SQL окне сделать следующее ....

START TRANSACTION; 
UPDATE users SET balance=balance + 1 WHERE id_user='someuserid' 
ROLLBACK WORK; 

Я ожидал, что баланс пользователя, чтобы остаться на это предыдущее значение (124), но вместо этого он продолжает добавлять один и показывает обновленный баланс 125 в конце этого.

Любая идея, что я делаю неправильно? Может быть, MySQL Db не поддерживает транзакции и/или UPDATE, как это разрешено откат в транзакциях?

ответ

0

Хорошо, проблема решена.

Для справки для всех, кто сталкивался с этим, это было связано с использованием используемого механизма таблицы.

В моей таблице использовался MyISASM, который НЕ поддерживает транзакции и терпит неудачу. Он автоматически выполняет любые транзакции, поэтому ROLLBACK никогда ничего не делал.

Исправление было изменить таблицу двигатель от MyISAM в InnoDB (сделал через PHPMyAdmin, но также может сделать это с помощью ALTER TABLE table_name ENGINE=InnoDB; SQL команды.

Теперь следующие работы отлично.

START TRANSACTION; 
UPDATE users SET balance = 8 WHERE id_user='s10'; 
UPDATE users SET balance = 9 WHERE id_user='s12'; 
ROLLBACK;