MySQL學習:
MySQL事務
事務處理用來維護數據庫的完整性,用來管理成批執行的MySQL操作。
介紹幾個術語
- 事務(transaction)
指一組SQL語句。
- 回退(rollback)
指撤銷指定SQL語句的過程。
- 提交(commit)
指將末存儲的SQL語句結果寫入數據庫表。
- 保留點(savepoint)
指事務處理中設置的臨時佔位符,你可以對它發佈回退(與回退整個事務處理不同)。
使用MySQL事務
- 標誌事務的開始
使用START TRANSACTION語句來標誌開始。
START TRANSACTION;
- 回退(撤銷)MySQL語句
使用 ROLLBACK 命令來回退MySQL語句。
注意:
- ROLLBACK只能在一個事務處理內使用(在執行一條START TRANSACTION命令之後)。
- 事務處理用來管理INSERT、UPDATE和DELETE語句,不能回退SELECT(沒意義)、CREATE和DROP(用了也沒效果)。
-- 說明表中有數據
SELECT * FROM students;
-- 標示事務的開始
START TRANSACTION;
-- 刪除表中的數據
DELETE FROM students;
-- 表示表中數據爲空
SELECT * FROM students;
-- 撤銷上一條語句
ROLLBACK;
-- 表名撤銷成功
SELECT * FROM students;
- 提交事務
一般的MySQL語句都是隱含提交的,即提交(寫或保存)操作時自動進行的。
COMMIT 語句僅在不出錯時寫出更改。
當 COMMIT 或 ROLLBACK 語句執行後,事務會自動關閉,將來的更改會隱含提交。
語句1;
語句2;
COMMIT;
- 使用保留點
爲了支持回退部分事務處理,必須能在事務處理塊中合適的位置放保留點。
使用 SAVEPOINT name_p 命令來創建,用 ROLLBACK TO name_p 來回退。
SAVEPOINT name_p1;
...
SAVEPOINT name_p2;
ROLLBACK To name_p1;
注意:
- 保留點越多越好。
- 保留點在事務處理完成(執行一條 ROLLBACK 或 COMMIT)後自動釋放。
- 更改默認的提交行爲
爲指示MySQL不自動提交更改,需要使用 SET autocommit=0 語句。
SET autocommit = 0;
其中autocommit標誌決定是否自動提交更改,設置爲0(假)時指示MySQL不自動提交更改,知道設置爲真爲止。
若有不當之處,歡迎指正!