MySQL筆記七:DML——事務
阿新 • • 發佈:2022-04-10
7.1事務的含義
事務是一個完成的業務邏輯,比如從A賬戶向B賬戶轉賬1000元,則將A賬戶的錢減去1000,B賬戶的錢加上1000
以上的操作是一個最小的工作單元,不可再分,要麼同時成功,要麼同時失敗,這樣才能保障錢是對的
7.2只有DML才有事務這一項,和其他語句無關
insert
delete
update
正是因為做某件事的時候,需要多條DML語句聯合起來才能實現,因此需要事務的存在,事務就是批量的DML語句同時成功或同時失敗。
7.3如何實現事務
InnoDB儲存引擎:提供一組用來記錄事務活動的日誌檔案
在事務的執行過程中,每一天DML的操作都被記錄在日誌檔案中,我們可以提交事務也可以回滾事務。
提交事務:清空事務性活動的日誌檔案,將資料完全徹底地表現在資料庫中,提交意味著事務的結束,是全部成功的結束。
回滾事務:將之前所有的DML操作全部撤銷,並且清空事務性活動的日誌檔案,回滾意味著事務的結束,是全部失敗的結束。
7.4提交事務和回滾事務
提交事務commit
回滾事務rollback
mysql在預設情況下是支援自動提交(每一條語句自動執行一次commit)的,這種自動提交實際上是不符合我們的開發習慣的,那麼怎麼關閉自動提交機制呢?
先執行:start transaction;
再執行:一條或多條DML語句
最後執行:commit;或rollback;//回滾只能跳到上一次提交的位置
7.5事務的特性
開啟之後,第一次讀到的資料可能是3條,第二次讀取的時候是4條,事務每次讀取的結果不一
樣),這種隔離級別讀到的都是真實的資料,因此orcle中預設的隔離級別是read committed
- 原子性:事務是最小的工作單元,不可再分
- 一致性:在同一個事務中,必須所有操作同時成功或同時失敗
- 隔離性:事務A和事務B之間有一定的隔離性,一張表有多個事務,相當於多執行緒操作
- 永續性:事務最終結束的一個保障,事務提交就相當於將沒有儲存到硬碟上的資料正式儲存到硬碟上
- 讀未提交:read uncommitted(最低級別)
- 讀已提交:read committed
- 可重複讀:repeated read
- 序列化/序列化:serializable(最高級別)