2016-08-01 28 views
0

我試圖通過node.js在MySQL中發佈以下內容(使用https://github.com/mysqljs/mysql庫)。node.js中的MySQL回滾

我正在使用事務API在出現錯誤時回滾,但似乎沒有回滾。接下來我試圖簡化問題,並把它直接在phpMyAdmin SQL框中執行以下操作....

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

我期待用戶餘額保持在它的前值(124),而是它不斷增加一個,並在此結束時顯示125的更新餘額。

任何想法我做錯了什麼?它可能是MySQL Db不支持事務和/或更新是否允許在事務中回滾?

回答

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;