事務
事務:是一組操作的集合,是一個不可分割的作業單位,事務會把所有操作作為一個整體一起向系統提交或撤銷操作請求,即這些操作要么同時成功,要么同時失敗(當操作中某一步出現例外時,前面已執行的步驟也會失效),
感覺有點像是函式,
- 默認MySQL的事務是自動提交的,當執行一條DML陳述句,MySQL會立即隱式地提交事務,
一. 事務操作
方式1: 修改事務提交方式
1. 查看/設定事務提交方式
# 查看事務提交方式(1為自動 0為手動)
select @@autocommit;
# 設定事務提交方式
set @@autocommit = 0;
2. 提交事務
commit;
3. 回滾事務
rollback;
方式2: 使用指令控制事務
1. 開啟事務
start transaction;
# or
begin;
2. 提交事務
commit;
3. 回滾事務
rollback;
二. 事務四大特性
1. 原子性(Atomicity)
事務是不可分割的最小操作單元,要么全部成功,要么全部失敗,
2. 一致性(Consistency)
事務完成時,必須使所有的資料都保持一致狀態,
3. 隔離性(Isolation)
資料庫系統提供的隔離機制,保證事務在不受外部并發操作影響的獨立環境下運行,
4. 持久性(Durability)
事務一旦提交或回滾,它對資料庫中的資料的改變就是永久的,
三. 并發事務問題
并發事務問題:指的是A事務和B事務在同時操作同一個資料庫或同一張表時所引發的問題,

- 不可重復讀:當一個事務中先后有兩個查詢同一個資料的操作時,如果在第一個操作后第二個操作前有一個并發的事務修改了那個資料并提交了,則會出現前后兩個查詢結果不一樣的情況,由于一個事務是一起成功或一起失敗,則資料的變更就算是出錯了,
四. 事務隔離級別
事務隔離級別: 用于解決并發事務問題,

-
上圖中的?意思是可能發生,
-
上圖中從上往下效率遞減,(事務隔離級別越高,資料越安全,但是性能越低)
-
查看與設定事務隔離級別:
# 查看事務隔離級別
select @@transaction_isolation;
# 設定事務隔離級別
set [session|global] transaction isolation level {隔離級別};
# session 會話級別 僅對當前客戶端視窗有效
# global 針對于所有客戶端的會話視窗有效
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/546660.html
標籤:其他
上一篇:redis之快取一致性
下一篇:Flink模式
