MySQL提供了事務(wù)回滾功能來(lái)保證數(shù)據(jù)庫(kù)數(shù)據(jù)的一致性。在一個(gè)事務(wù)中,如果出現(xiàn)異常操作或者用戶取消操作,可以回滾事務(wù),使數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)到事務(wù)開(kāi)始前的狀態(tài)。
MySQL事務(wù)的回滾可以通過(guò)ROLLBACK語(yǔ)句來(lái)執(zhí)行,該語(yǔ)句會(huì)撤銷所有尚未提交的事務(wù),刪除已經(jīng)對(duì)數(shù)據(jù)庫(kù)做出的所有更改,并釋放由事務(wù)占用的所有資源。
START TRANSACTION; UPDATE account SET balance = balance - 1000 WHERE id = 1; UPDATE account SET balance = balance + 1000 WHERE id = 2; COMMIT;
START TRANSACTION; UPDATE account SET balance = balance - 1000 WHERE id = 1; UPDATE account SET balance = balance + 1000 WHERE id = 2; ROLLBACK;
Redis也支持事務(wù)回滾功能,通過(guò)MULTI和EXEC命令來(lái)開(kāi)啟和提交一個(gè)事務(wù),使用DISCARD命令可以回滾事務(wù)中的所有命令。
MULTI INCR counter INCR counter TTL counter EXEC
MULTI INCR counter INCR counter DISCARD
在Redis中,當(dāng)出現(xiàn)網(wǎng)絡(luò)故障或者程序異常時(shí),可以使用事務(wù)回滾來(lái)保證數(shù)據(jù)的一致性。Redis會(huì)回滾整個(gè)事務(wù)中的所有命令。
在實(shí)際開(kāi)發(fā)中,使用事務(wù)回滾可以有效防止數(shù)據(jù)的損失和錯(cuò)誤,對(duì)于關(guān)鍵性操作更是必不可少。