1.事務是一條或多條資料庫操作語句的組合。四個特性:acid;原子性;隔離性;一致性;永續性。mysql 本身不提供事務支援,而是開放了儲存引擎介面,由具體的儲存引擎來實現,具體來說支援 mysql 事務的儲存引擎就是 innodb。儲存引擎實現事務的通用方式是基於 redo log 和 undo log。
多版本併發控制(重要):
mysql的事務儲存引擎不是簡單實用行加鎖機制,而是叫多版本併發控制(mvcc)技術,和行加鎖機制關聯實用。以便應對更高的併發,當然是以消耗效能作為代價。
每種儲存引擎對mvcc的實現方式不同,innodb引擎的簡單實現方式如下:innodb通過為每個資料航增加兩個隱含值的方式來實現。這兩個隱含值記錄了行的建立時間,以及過期時間。每一行儲存事件發生時的系統版本號。每一次開始乙個新事務時版本號會自動加1,每個事務都會儲存開始時的版本號,每個查詢根據事務的版本號來查詢結果。
2.資料庫併發操作會引發的問題:髒讀(dirty read);不可重複讀(unrepeatable read);幻讀(phantom read);第一類丟失更新;第二類丟失更新;
3.sql 標準中定義了 4 個隔離級別: read uncommited , read commited , repeatable read , serializable 。
mysql預設的事務隔離級別為repeatable_read。
4.全部的表型別都可以使用鎖,但是只有 innodb 和 bdb 才有內建的事務功能。使用 begin 開始事務,使用 commit 結束事務,中間可以使用 rollback 回滾事務。在預設情況下, innodb 表支援一致讀。mysql 允許利用 set transaction 來設定隔離級別。如果多個事務更新了同一行,就可以通過回滾其中乙個事務來解除死鎖。
5.事務只用於 insert 和 update語句來更新資料表,不能用於對錶結構的更改。執行一條更改表結構或 begin 則會立即提交當前的事務。
6.有兩種型別的表級鎖:讀鎖和寫鎖。讀鎖是共享鎖,支援併發讀,寫操作被鎖。寫鎖是獨佔鎖,上鎖期間其他執行緒不能讀表或寫表。所有表型別都支援表級鎖,但是 myisam 只支援表級鎖。
7.如果要支援併發讀寫,建議採用 innodb 表,因為它是採用行級鎖,可以獲得更多的更新效能。如果mysql資料庫引擎選用myisam會對資料儲存的穩定性,資料查詢的高效性上面有更多優勢,但它不支援事務處理,但是如果不是涉及對資料同步要求非常嚴格的資料操作都建議使用myisam儲存引擎。任何一種表都不是萬能的,只用恰當的針對業務型別來選擇合適的表型別,才能最大的發揮mysql的效能優勢。很多時候,可以通過經驗來評估什麼樣的鎖對應用程式更合適,不過通常很難說乙個鎖比別的更好,這全都要依據應用程式來決定,不同的地方可能需要不同的鎖。當前 mysql 已經支援 isam, myisam, memory (heap) 型別表的表級鎖了, bdb 表支援頁級鎖, innodb 表支援行級鎖。
8.mysql 的表級鎖都是寫鎖優先,而且是採用排隊機制,這樣不會出現死鎖的情況。對於 innodb 和 bdb 儲存引擎來說,是可能產生死鎖的。這是因為 innodb 會自動捕獲行鎖, bdb 會在執行 sql 語句時捕獲頁鎖的,而不是在事務的開始就這麼做。
9.對於 innodb 和 bdb 表, mysql 只有在指定用 lock tables 鎖表時才使用表級鎖。在這兩種表中,建議最好不要使用 lock tables ,因為 innodb 自動採用行級鎖, bdb 用頁級鎖來保證事務的隔離。
10.mysql涉及的資料結構
1)b+樹:是一種多路搜尋樹,b樹是二叉搜尋樹,b+是b樹的一種變種,
b+ 樹元素自底向上插入,這與二叉樹恰好相反。
2)在myidim引擎下,主鍵索引和輔助索引的資料結構是b+樹,
1.葉節點的data域存放的是資料記錄的位址
2.在myisam中,主索引和輔助索引(secondary key)在結構上沒有任何區別,只是主索引要求key是唯一的,而輔助索引的key可以重複。
3.myisam中索引檢索的演算法為首先按照b+tree搜尋演算法搜尋索引,如果指定的key存在,則取出其data域的值,然後以data域的值為位址,讀取相應資料記錄。
3)在innodb也使用b+tree作為索引結構,但但具體實現方式卻與myisam截然不同。
1.第乙個重大區別是innodb的資料檔案本身就是索引檔案。
2.第二個與myisam索引的不同是innodb的輔助索引data域儲存相應記錄主鍵的值而不是位址。
mysql事務與鎖機制 mysql事務與鎖機制
在併發下事務會容易出現的一些問題 資料更新丟失 兩個事務同時操作一條資料,乙個事務因為異常導致資料更新丟失 髒讀 乙個失誤開始讀取了某行資料,另外乙個事務已經更新了此資料但沒有能夠及時提交。這是相當危險的,因為很可能所有的操作都被回滾。不可重複讀 乙個事務對同一行資料重複讀取兩次,但是卻得到了不同的...
MySQL事務與鎖機制
在事務的四個特點中,一致性是事務的根本追求,而在某些情況下會對事務的一致性造成破壞,如 事務的併發執行 事務故障或者系統故障 資料庫系統通過併發控制技術和日誌恢復技術來避免這種情況的發生 併發控制技術保證了事務的隔離性,使得資料庫的一致性狀態不會因為併發執行的操作而被破壞。日誌恢復技術保證了事務的原...
Mysql 事務及鎖機制
事務的基本概念 資料庫事務是構成單一邏輯工作單元的操作集合 注意點 1.資料庫事務可以包含乙個或多個資料庫操作,但這些操作構成乙個邏輯上的整體 2.構成邏輯整體的這些資料庫操作,要麼全部執行成功,要麼全部不執行 3.構成事務的所有操作,要麼全部對資料庫產生影響,要麼全部都不產生影響,即資料庫保持一致...