MySQL和SQL默認都是事務(wù)性的。什么是事務(wù)呢?事務(wù)是一系列操作的集合,這些操作要么全部成功,要么全部失敗。如果其中任何一個操作失敗,整個事務(wù)就會被回滾,即所有的操作都會撤銷,回到事務(wù)執(zhí)行之前的狀態(tài)。
對于MySQL和SQL而言,幾乎所有的語句和操作都是事務(wù)性的,包括SELECT查詢語句。這也就意味著,如果你沒有顯式地開啟一個事務(wù),每個語句都會自動成為一個事務(wù)。例如,下面的SQL語句將自動成為一個事務(wù):
UPDATE users SET name = 'John' WHERE id = 1; UPDATE accounts SET balance = 1000 WHERE user_id = 1;
這兩條語句將被視為一個事務(wù),如果其中任一一條出現(xiàn)錯誤,整個事務(wù)將被回滾。
當然,在開發(fā)中,你也可以顯式地開啟一個事務(wù),并在事務(wù)執(zhí)行完成后手動提交或回滾事務(wù)。這可以通過使用BEGIN、COMMIT和ROLLBACK語句來完成,例如:
BEGIN; INSERT INTO users(name, email) VALUES ('John', 'john@example.com'); INSERT INTO accounts(user_id, balance) VALUES (LAST_INSERT_ID(), 1000); COMMIT;
在上面的例子中,我們首先用BEGIN語句開啟了一個事務(wù),然后插入了一些數(shù)據(jù),最后使用COMMIT語句提交了事務(wù)。如果在事務(wù)執(zhí)行過程中出現(xiàn)錯誤,我們可以使用ROLLBACK語句回滾事務(wù)。