一、問題讀取
1. 髒讀(dirty read):事務1更新了某一條記錄,但未提交;事務2讀取到新的未提交記錄;事務1回滾。
2. 不可重複讀取(nonrepeatable read):
不可重複讀,是指在資料庫訪問中,乙個
事務範圍內兩個相同的查詢卻返回了不同資料。
例子:事務1讀取某一條記錄;事務2修改事務1讀取的記錄提交後;事務1再次讀取該記錄。
3. 幻象讀取(phantom read):事務1按 where 子句讀取一批記錄;事務2插入一條或多條符合事務1讀取規則的記錄;事務1再按一樣的 where 子句讀取一批記錄。二、隔離級別(級別由低到高)
1. read uncommitted三、事務控制語句(讀取未提交內容)
2. read commited
(讀取提交內容)
3. repeatable read
(可重讀)
4. serializable
(可序列化)
隔離級別
髒讀
不可重複讀
幻讀
read uncommitted
√
√
√
read committed
×
√
√
repeatable read
×
×
√
serializable
×
×
×
檢視當前會話隔離級別四、事務的特性(acid)select @@tx_isolation;
檢視系統當前隔離級別
select @@global.tx_isolation;
設定當前會話隔離級別
set session transaction isolatin level repeatable read;
設定系統當前隔離級別
set global transaction isolation level repeatable read;
命令列,開始事務時
set autocommit=off 或者 start transaction
原子性(atomicity)
原子性是指
乙個事務是乙個不可分割的工作單位,事務中包括的諸操作要麼都做,要麼都不做。
只有使事務中所有的資料庫操作執行都成功,才算整個事務成功。只要有乙個
sql語句執行失敗,那麼在這個事務中已經執行的
sql語句都必須撤銷,資料庫狀態應該退回到執行事務前的狀態。
一致性(consistency)
事務必須是使
資料庫從乙個一致性狀態變到另乙個一致性狀態。一致性與原子性是密切相關的。
在事務開始之前和結束之後,資料庫的完整性約束沒有被破壞。
隔離性(isolation)
乙個事務的執行不能被其他事務干擾。即乙個事務內部的操作及使用的資料對併發的其他事務是隔離的,併發執行的各個事務之間不能互相干擾,這些通過鎖來實現。
永續性(durability)
持續性也稱永久性(
permanence
),指乙個事務一旦提交,它對
資料庫中資料的改變就應該是永久性的。接下來的其他操作或故障(比如說宕機等)不應該對其有任何影響。
mysql筆記 事務
寫日誌為什麼比直接寫磁碟要快?使用事務日誌,儲存引擎在修改表的資料時,只需要修改其記憶體拷貝,再把該修改行為記錄到硬碟上的事務日誌中,而不用每次都將修改的資料本身持久到磁碟。事務日誌採用的是追加的方式,因此寫日誌的操作是磁碟上一小塊區域內的順序i o,而不是隨機i o,所以快很多。事務日誌持久以後,...
Mysql筆記 事務
事務 transaction 會把資料庫從一種一致狀態轉換為另一種一致狀態。在資料庫提交工作時,要麼所有修改都已經儲存了,要麼修改都不儲存。事務是訪問並更新資料庫中各種資料項的乙個程式執行單元。在執行中要麼都做修改,要麼都不做修改。innodb儲存引擎中的事務完全符合acid的特性。l 原子性 at...
MySQL學習筆記 事務
事務是用來保證一組資料庫的操作,要麼全部成功,要麼全部失敗 應用場景較多 如銀行轉賬,訂票等。mysql的事務是在引擎層支援的,原生的myisam不支援,因此主流使用innodb引擎。原子性顧名思義,不可分割,要麼所有指令都成功,要麼所有指令都失敗 一致性事務開始前和事務結束後,資料庫的狀態都是正常...