MySQL常用基礎概念(二)

2021-10-07 16:40:35 字數 2165 閱讀 6637

mysql常用基礎概念(二)

1.3.3 事務日誌

事務日誌可以幫助提高事務的效率。使用事務日誌,儲存引擎在修改表的資料時只需要修改其記憶體拷貝,再把該修改行為記錄到持久在硬碟的事務日誌中,而不用每次都將修改的資料本身持久化到磁碟

1.3.4 mysql中的事務

mysql提供了兩種事務型的儲存引擎: innodb 和 ndb cluster。

自動提交(autocommit)

mysql預設採用自動提交(autocommit)模式。也就是說如果不是顯示的開始乙個事務,則每個查詢都被當做乙個事務執行提交操作,在當前連線中,可以通過autocommit變數來啟用或禁用自動提交模式;

也可檢視當前提交模式 show variables like 『autocommit』;

1或者on標識啟用, 0 或者off標識禁用。

當autocommit=0時,所有的查詢都是在乙個事務中,直到顯示的執行commit提交或者rollback回滾,該事務結束,同時有開始了乙個新的事務。修改autocommit對非事務型的表,比如myisam或者記憶體表,不會有任何影響,對這類表來說,沒有commit或者rollback的概念,也可以說是一直處於autocommit啟用的模式

在事務中混合使用儲存引擎

如果在事務中混合使用了事務型和非事務型的表(例如innodb和myisam表),在正常的提交情況下不會有什麼問題

但如果事務需要回滾,非事務型表上的變更就無法撤銷,這會導致資料庫處於不一致的狀態,這種情況很難修復,事務的最終結果無法確定

在非事務的表上執行事務相關的操作時,mysql通常不會發出提醒,也不會報錯,有時候只有回滾的時候才會發出乙個警告

隱式和顯式鎖定

innodb採用的是兩階段鎖定協議,在事務執行過程中,所示都可以執行鎖定,鎖只有在執行commit或rollback的時候才會釋放,並且所有的鎖都是在同一時刻被釋放,這種鎖定是隱式鎖定,innodb會根據隔離級別在需要的時候自動加鎖

另外,innodb也支援通過特定的語句進行顯示鎖定,這些語句不屬於sql規範:

select *** lock in share mode

select *** for update

1.4多版本併發控制

mysql的大多數事務型儲存引擎實現的都不是簡單的行級鎖,基於提公升併發效能的考慮。他們一般都同時實現了多版本併發控制(mvcc)。

mvcc的實現是通過儲存資料在某個時間點的快照來實現的,也就是說,不管需要執行多長時間,每個事務看到的資料都是一致的,根據事務開始的時間不同,每個事務對同一張,同一時刻的資料可能是不一樣的。

不同的儲存引擎的mvcc實現也是不同的,典型的有樂觀併發控制和悲觀併發控制。

innodb的mvcc是通過在每行記錄後面儲存兩個隱藏的列來實現的,這兩個列乙個儲存了行的建立時間,乙個儲存了行的過期時間(或刪除時間),當然儲存的並不是實際的時間值,而是系統版本號,沒開始乙個新的事務,系統版本號都是自動遞增,事務開始時刻的系統版本號作為事務的版本號,用來查詢到的每行記錄的版本號來進行比較。下面看一下在repeatable read 隔離級別下,mvcc具體如何操作的;

select

innodb會根據以下兩個條件檢查每行記錄:

a.innodb只查詢版本早於當前事務版本的資料行,這樣可以確保事務讀取的行,要麼是在事務開始前已經存在的,要麼是事務自身插入或者修改過的,

b.行的刪除版本要麼未定義,要麼大於當前事務版本號,這樣可以確保事務讀取到的行,在事務開始之前未被刪除。

只有滿足以上兩個條件的記錄,才能作為查詢結果

insert

innodb為每新插入的每一行儲存當前系統版本號作為行版本號;

delete

innodb為刪除的每一行儲存當前系統版本號作為刪除標識;

update

innodb為插入一行新記錄,儲存當前系統版本號作為行版本號,同時儲存當前系統的版本號到原來的行作為刪除標識。

儲存這兩個額外的系統版本號,是大多數讀操作都可以不用加鎖,這樣設計使得讀資料操作很簡單,效能很哈,並且也能保證只會讀取到符合標準的行,不足之處是每行記錄都需要額外的儲存空間,沒要跟多的行檢查工作以及一些額外的維護工作。

mvcc只在repeatable read 和 read commited 兩個隔離級別下工作,其他兩個隔離級別都和mvcc不相容,因為read uncommited總是讀到最新的資料行,而不是符合當前事務版本的資料行,而serializable會對所有的行都加鎖

MySQL常用基礎概念(一)

1.1mysql邏輯框架 mysql伺服器邏輯框架大概分為三層 最上層的服務是 連線 線層處理層 用於直接接受客戶端的請求,這一層並不是mysql所獨有的,大多數給予網路的客戶端 伺服器的工具或者服務都有類似的架構 第二層架構 包含 解析 分析 優化 快取 以及所有內建函式 例如 日期 時間 數學和...

mysql(一) 基礎概念

mysql 為關係型資料庫 relational database management system 這種所謂的 關係型 可以理解為 的概念,乙個關係型資料庫由乙個或數個 組成,如圖所示的乙個 2.在安裝資料夾下找到 my small.ini 配置檔案,將其重新命名為 my.ini 開啟進行編輯,...

MySQL(一) 基礎概念

關係型資料庫是建立在關係模型上的,關係模型本質是若干個儲存資料的二維表,表的每一行稱為記錄 record 記錄是乙個邏輯意義上的資料。表的每一列稱為字段 column 同一表的每一行記錄都有相同的若干字段。字段定義了資料型別,以及是否被允許為null null表示字段資料不存在,乙個整型字段如果為n...