mysql優化(1) mysql事務

2021-10-01 04:45:21 字數 1631 閱讀 9210

事務是mysql等關係型資料庫區別於nosql的重要方面(隨著發展nosql資料庫也開始有了事物的概念),是保證資料一致性的重要手段。本文將首先介紹mysql事務相關的基礎概念,然後介紹事務的acid特性,並分析其實現原理。

事務由乙個或多個sql語句組成乙個整體,如果所有的語句執行成功那麼修改將會全部生效,如一條sql語句將銷量+1,下一條再+1,倘若第二條失敗,那麼銷量將撤銷第一條sql語句的+1操作,只有在該事務中所有的語句都執行成功才會將修改加入到資料庫中。

事務具體四大特性,也就是經常說的acid 

1. 原子性(atomicity) 

原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾,因此事務的操作如果成功就必須要完全應用到資料庫,如果操作失敗則不能對資料庫有任何影響。 

2. 一致性(consistency) 

一致性是指事務必須使資料庫從乙個一致性狀態變換到另乙個一致性狀態,也就是說乙個事務執行之前和執行之後都必須處於一致性狀態。

拿轉賬來說,假設使用者a和使用者b兩者的錢加起來一共是5000,那麼不管a和b之間如何轉賬,轉幾次賬,事務結束後兩個使用者的錢相加起來應該還得是5000,這就是事務的一致性。

3.隔離性(isolation) 

隔離性是當多個使用者併發訪問資料庫時,比如操作同一張表時,資料庫為每乙個使用者開啟的事務,不能被其他事務的操作所干擾,多個併發事務之間要相互隔離。

即要達到這麼一種效果:對於任意兩個併發的事務t1和t2,在事務t1看來,t2要麼在t1開始之前就已經結束,要麼在t1結束之後才開始,這樣每個事務都感覺不到有其他事務在併發地執行。

4.永續性(durability) 

永續性是指乙個事務一旦被提交了,那麼對資料庫中的資料的改變就是永久性的,即便是在資料庫系統遇到故障的情況下也不會丟失提交事務的操作。mysql中會儲存有相應的操作日誌,即使遭遇故障依然能夠通過日誌恢復最後一次更新。

資料庫事務的隔離級別有4個,由低到高依次為read uncommitted 、read committed 、repeatable read 、serializable ,這四個級別可以逐個解決髒讀 、不可重複讀 、幻讀 這幾類問題。一般情況下認為對innodb的預設隔離級別repeatable read(可重複讀)情況下不會出現幻讀

√: 可能出現    ×: 不會出現

髒讀不可重複讀

幻讀read uncommitted√√

√read committed×√

√repeatable read××

√(innodb除外)

serializable××

×未提交事務對其他事務可見

缺點:可能會造成髒讀、幻讀、不可重複讀。

舉例 :轉賬的例子,阿三開了家超市,客戶開啟乙個事務a:轉賬100元未提交,此時阿三開啟手機檢視轉賬開啟另乙個事務b,發現有一筆一百元的轉賬。這時客戶回滾事務,阿三賬戶上的一百元再檢視就不見了,此前檢視到的內容就是髒讀。

開啟乙個事務後,只能讀取已提交額事務

缺點:解決了髒讀問題,不可重複讀

在乙個事務裡多次讀取相同的資料,結果相同

最高的隔離級別,通過事務序列化執行

缺點:效率慢

1 MySQL優化專題

優化 er圖,資料建模與資料字典 1 儲存引擎選擇 2 列表型別選擇 3 正規化 4 慢日誌查詢 5 精準時間記錄查詢 6 計畫任務explain 7 索引 8 鎖與事務 9 查詢快取 10 儲存過程 11 觸發器 12 分割槽 分表,分庫 14 sphinx 15 讀寫分離 16 搜尋優化 17 ...

(1)MySQL之併發控制與事務

同一時刻多個使用者併發讀取資料不會存在什麼問題,因為讀取不會修改資料,但是如果乙個使用者正在讀取某個資料,而另乙個使用者又在修改這個資料,就會產生不確定的結果,這就涉及到併發控制。在處理併發讀的或者寫時,可以通過實現乙個由兩種型別的鎖組成的鎖系統來解決,這兩種型別的鎖通常就被稱為共享鎖和排他鎖,又叫...

MySQL高階1 Mysql架構

安裝目錄 var lib mysql mysql資料庫檔案的存放路徑 usr share mysql 配置檔案目錄 usr bin 相關命令目錄 用於主從複製 預設是關閉的,記錄嚴重的錯誤資訊,每次啟動和關閉等詳細資訊 預設關閉,記錄查詢的sql語句,如果開啟會減低mysql的整體效能,因為記錄日誌...