【資料分析師_02_SQL+MySQL】029_MySQL的事務管理(TRANSACTION,ROLLBACK,COMMIT,SAVEPOINT)
阿新 • • 發佈:2020-12-27
MySQL的事務管理
1 概述
TRANSACTION
是一種保護機制!
在使用事務和事務處理時,有幾個關鍵詞彙反覆出現。下面是關於事務處理需要知道的幾個術語:
- 事務(transaction)指一組SQL語句
- 回退(rollback)指撤銷指定SQL語句的過程
- 提交(commit)指將未儲存的SQL語句結果寫入資料庫表
- 保留點(savepoint)指事務處理中設定的臨時佔位符(place_x0002_holder),你可以對它釋出回退(與回退整個事務處理不同)
事務處理是一種機制,用來管理必須成批執行的MySQL操作,以保證資料庫不包含不完整的操作結果。利用事務處理,可以保證一組操作不會中途停止,它們或者作為整體執行,或者完全不執行(除非明確指示)。
1.1 事務處理的例子
比如:
A往ATM存入1000¥,此時A-1000¥,假設此時銀行收到錢後DB出錯沒有記錄A的賬戶+1000¥,則A的資產-1000¥,資料庫出錯。而在存在 Rollback的情況下,銀行沒有正確記錄A的賬戶+1000¥時,ATM會自動退出這1000¥。
1.2 事務處理的特點
用來維護資料庫的完整性,保證成批 SQL操作的成功,如果有問題則全部失敗
1.3 事務處理的前提
innodb支援(當前 SQL預設為innodb)
myisam不支援
1.4 事務處理的術語
transaction
rollback
回滾commit
提交savepoint
存檔點
2 MySQL事務管理的使用
2.1 建立一個演示表
start TRANSACTION
就像是在正常遊戲存檔之外,開了一個副本進行資料處理,這樣可以保證原始資料的安全(開啟了保護機制)。
2.2 ROLLBACK 回滾資料(備份-刪除-恢復)
drop table customers2; create table customers2 as select * from customers; select * from customers2; # 看看啥情況 start TRANSACTION; # 開啟保護機制! delete from customers2; # 刪掉資料 select * from customers2; # 看看啥情況 rollback; # 回滾結果,恢復 customer2 select * from customers2; # 又恢復了
2.3 COMMIT 提交資料(備份-確認修改)
drop table customers2;
create table customers2 as select * from customers;
select * from customers2;
start TRANSACTION; # 開啟保護機制!
delete from customers2;
select * from customers2;
commit; # 一旦確認修改,就無法恢復了!
2.4 SAVEPOINT
drop table customers2;
create table customers2 as select * from customers;
select * from customers2;
start TRANSACTION;
delete from customers2 where cust_id = '10001';
select * from customers2;
savepoint x1;
delete from customers2 where cust_id = '10002';
select * from customers2;
ROLLBACK TO x1;
select * from customers2;