事務控制語言DTL
阿新 • • 發佈:2018-11-25
寫入 inf order 不執行 art 特點 更改 決定 多個
一、什麽是事務?
· 數據庫中的事務,是指可以將“多條相關語句執行”看做是“一條語句執行”的一種內部機制。即事務是一種可以保證“多條語句一次性執行完成”或者一條語句都不執行的機制。
三、事務的特點
- 原子性--事務中的語句,應該都能做到,要麽全部完成,要麽都不做。
- 一致性--讓數據保持邏輯上的“合理性”
- 隔離性--如果多個事務同時並發執行,但每個事務就像獨立運行一樣
- 持久性--一個事務執行成功,就明確物理硬盤的數據改變
四、事務模式
事務模式:就是讓每條執行語句當做“一個事務”的設定項。
- mysql安裝好之後,默認其事務模式是:一條語句就是一個事務既(autocommit=1)
- 可以將其設定為“認可”模式--既執行“commit;”語句才生效 ,set autocommit=0,關閉該模式示例:
update test set num=20 where id = 1;
更改事務模式
set autocommit = 0;
再次執行更改數據語句:
update test set num=31 where id = 1;
結果:執行 commit;
五、事務的基本執行流程
- 事務聲明開始:start transaction;
- 設定多條要執行的具體語句。比如,inesert,update,delete,...
- 其實只是“執行”,並不“‘生效’”--只是在內存狀態下的執行,而不是在物理狀態的執行
- 判斷是否需要執行這些語句:
if(判斷錯誤條件) {
//語句執行;
commit;//這時才生效--物理狀態既寫入硬盤
}
else {
rollback;//回滾--不執行任何語句
}
判斷錯誤條件通常在以下2種環境:
- 命令行(cmd)環境,直接觀察
- 如果是php程序,用mysqli_error()函數判斷
二、為什麽需要事務?
舉例:
id | account(賬戶) | deposit(存款) |
1 | test01 | 1000 |
2 | test02 | 5000 |
表(saving)
test01和test02認識且在不同城市,test01想購買iPhone7(5000元),想向test02借4000元,上圖為2人在銀行存款
銀行轉賬:
第一步:update saving set deposit=deposit-4000 where id = 2;
第二步:update saving set deposit=deposit+4000 where id = 1;
如果上面2步都沒有錯誤,則執行:
commit;//執行
如果又錯誤,則可以:
rollback;//回滾到最初狀態
事務可以看做是一個“容器”,將多條語句放入該“容器”,最後只要一個命令行,來決定是否執行該“容器”
結果:
還錢:結果:
事務控制語言DTL