【事務】一組SQL語句操作單元,組內所有SQL語句,完成一個業務。 若整組成功,意味著組內的全部操作都成功; 反之,若其中任何一條語句失敗,意味著整個操作都失敗。 操作失敗,意味著整個過程都是沒有意義的,應使資料庫回到操作前的初始狀態。 【point】1. 失敗後,能回到開始位置; 2. 成功之前, ...
【事務】一組SQL語句操作單元,組內所有SQL語句,完成一個業務。
若整組成功,意味著組內的全部操作都成功;
反之,若其中任何一條語句失敗,意味著整個操作都失敗。
操作失敗,意味著整個過程都是沒有意義的,應使資料庫回到操作前的初始狀態。
【point】1. 失敗後,能回到開始位置;
2. 成功之前,其他用戶(進程、規劃)不能看到操作內的修改。
【思路】在一組操作之前,設計一個記號(備份點)。
【實現】利用 innodb 存儲引擎的“事務日誌”功能。
執行分為2個階段:
1. 執行階段;
2. 將執行結果提交給資料庫的階段;
其中,事務日誌便是將執行階段的結果保存,若用戶選擇提交,才將執行結果提交給資料庫。
(預設的執行方式:自動提交)
需要關閉自動提交功能(存在一個系統變數,autocommit 可以對自動提交進行配置)
1 set autocommit = 0 ; // 0 意味著關閉自動提交功能;1 意味著開啟
若成功,執行 commit 提交結果;
若失敗,執行 rollback ,回到起始位置。
--------------------------------------------------------------------------
【常用的事務指令】
1. start transaction 開啟事務(作用:關閉自動提交)。
特點:若事務結束了,無論成敗,都會提交機制,回到start時的狀態(原來是autocommit,就會回到autocommit狀態)。
2. commit
3. rollback
【小練習】
1. 指令
2. 為什麼會有事務?
自動提交、事務日誌。
3. 事務的特點?(ACID)
1) 原子性:對於外界而言,事務中的SQL語句是一個整體;
2) 一致性:在事務執行過程中,數據不受其他操作的影響;
3) 隔離性:事務之間不會相互影響。
4) 持久性:事務一旦提交,意味著對資料庫產生了影響,不可以再回退。