1、務的特性:原子性、一致性、隔離性、永續性
2、多事務同時執行的時候,可能會出現的問題:髒讀、不可重複讀、幻讀
3、事務隔離級別:讀未提交、讀提交、可重複讀、序列化
4、不同事務隔離級別的區別:
讀未提交:乙個事務還未提交,它所做的變更就可以被別的事務看到
讀提交:乙個事務提交之後,它所做的變更才可以被別的事務看到
可重複讀:乙個事務執行過程中看到的資料是一致的。未提交的更改對其他事務是不可見的
序列化:對應乙個記錄會加讀寫鎖,出現衝突的時候,後訪問的事務必須等前乙個事務執行完成才能繼續執行
5、配置方法:啟動引數transaction-isolation
6、事務隔離的實現:每條記錄在更新的時候都會同時記錄一條回滾操作。同一條記錄在系統中可以存在多個版本,這就是資料庫的多版本併發控制(mvcc)。
7、回滾日誌什麼時候刪除?系統會判斷當沒有事務需要用到這些回滾日誌的時候,回滾日誌會被刪除。
8、什麼時候不需要了?當系統裡麼有比這個回滾日誌更早的read-view的時候。
9、為什麼盡量不要使用長事務。長事務意味著系統裡面會存在很老的事務檢視,在這個事務提交之前,回滾記錄都要保留,這會導致大量占用儲存空間。除此之外,長事務還占用鎖資源,可能會拖垮庫。
10、事務啟動方式:一、顯式啟動事務語句,begin或者start
transaction,提交commit,回滾rollback;二、set
autocommit=0,該命令會把這個執行緒的自動提交關掉。這樣只要執行乙個select語句,事務就啟動,並不會自動提交,直到主動執行commit或rollback或斷開連線。
11、建議使用方法一,如果考慮多一次互動問題,可以使用commit
work and
chain語法。在autocommit=1的情況下用begin顯式啟動事務,如果執行commit則提交事務。如果執行commit work
and chain則提交事務並自動啟動下乙個事務。
髒讀:當資料庫中乙個事務a正在修改乙個資料但是還未提交或者回滾,
另乙個事務b 來讀取了修改後的內容並且使用了,
之後事務a提交了,此時就引起了髒讀。
此情況僅會發生在: 讀未提交的的隔離級別.
不可重複讀:
在乙個事務a中多次運算元據,在事務操作過程中(未最終提交),
事務b也才做了處理,並且該值發生了改變,這時候就會導致a在事務操作
的時候,發現資料與第一次不一樣了。 就是不可重複讀。
此情況僅會發生在:讀未提交、讀提交的隔離級別.
幻讀:乙個事務按相同的查詢條件重新讀取以前檢索過的資料,
卻發現其他事務插入了滿足其查詢條件的新資料,這種現象就稱為幻讀。
幻讀是指當事務不是獨立執行時發生的一種現象,例如第乙個事務對乙個表中的資料進行了修改,比如這種修改涉及到表中的「全部資料行」。同時,第二個事務也修改這個表中的資料,這種修改是向表中插入「一行新資料」。那麼,以後就會發生操作第乙個事務的使用者發現表中還存在沒有修改的資料行,就好象發生了幻覺一樣.
一般解決幻讀的方法是增加範圍鎖ranges,鎖定檢索範圍為唯讀,這樣就避免了幻讀。
此情況會回發生在:讀未提交、讀提交、可重複讀的隔離級別.
事務的隔離級別:
四種:讀未提交 、 讀提交 、 可重複讀、 序列化。
mysql實戰45講學習筆記 02
2.日誌系統 一條sql更新語句是如何執行的 一條查詢語句執行過程是經過聯結器,分析器,優化器,執行器等功能模組最後到達儲存引擎 查詢語句的流程,更新語句也是會同樣走一遍。更新流程還涉及兩個重要的日誌系統,redo log 重做日誌 和binlog 歸檔日誌 重要的日誌模組 redo log mys...
mysql實戰45講學習筆記 11
11 怎麼給字串欄位加索引字首索引的優勢,選取欄位前幾個作為索引,占用的空間更小 使用字首索引,定義好長度,就可以做到既節省空間,又不用額外增加太多的查詢成本。建立索引的時候關注的是區分度,區分度越高越好,區分度越高,意味著重複的鍵值越少,因此,可以通過統計索引上有多少不同的值來判斷使用多長字首。m...
mysql實戰45講學習筆記 12
為什麼我的mysql 抖 了一下一條sql語句,正常執行的時候特別快,但有時會突然變得特別慢,並且隨機,持續時間短。將對應的記憶體資料寫入到磁碟的過程,叫做flush。當記憶體資料頁跟磁碟資料頁內容不一致的時候,我們稱這個記憶體頁為 髒頁 記憶體資料寫入到磁碟後,記憶體和磁碟上的資料頁就一致,稱為 ...