資料庫之mysql儲存引擎

2021-09-27 03:07:27 字數 1719 閱讀 3643

mysql支援的常見儲存引擎有(可通過show engines檢視)

innodb、myisam、memory、csv、bdb

其中,innodb和bdb支援事務安全,其他引擎都是非事務安全。

比較常見的問題是 innodb和myisam的區別:

特點innodb

myisam

事務安全

支援不支援

支援外來鍵

支援不支援

鎖機制行級鎖

表級鎖b樹索引

支援支援

雜湊索引

不支援不支援

全文索引

不支援支援

集群索引

支援不支援

資料快取

支援不支援

索引快取

支援支援

事務安全:

事務的應用場景:多條sql語句在執行時,同進退。若成功則全部成功,若失敗則全部失敗。

例如在銀行系統中,小紅給小明轉了500塊錢:

操作一:從小紅的賬戶中扣除500塊錢

操作二:小明的賬戶增加500塊錢

如果乙個事務沒有提交之前,提交的sql語句其實本質上就記錄日誌檔案上的,並沒有真正的提交到資料庫中,commit才會真正的向資料庫中進行修改,而不支援事務的引擎只要執行一條sql語句,則會直接寫入資料庫。

支援外來鍵:

country表中country_id是主鍵,city表中以country_id為外來鍵。

外來鍵約束:更新父表時子表更改的策略級別有restrict、cascade、set null 、 no action

restrict

如果子表中有關聯記錄的情況下,父表不能更新

cascade

父表更新,子表一起更新

set null

父表更新,子表相應欄位被置為null

no action

如果子表中有關聯記錄的情況下,父表不能更新

在建立外來鍵時,要求父表必須有對應的索引,子表在建立外來鍵的時候也會自動建立對應的索引。

mysql的鎖機制:

表級鎖開銷小,加鎖快,不會出現死鎖。併發度低

表共享讀鎖

(不阻塞讀請求,阻塞其他寫請求,可重複讀級別)

表獨佔寫鎖

(阻塞其他讀寫請求,序列化級別)

雖然myisam支援表級鎖,寫讀是序列的,但是在一定條件下支援併發插入,通過concurrent insert變數控制,當等於0,不允許併發插入,當大於0時,允許併發 插入,即myisam允許在乙個程序讀表的同時,另乙個程序可以在表尾進行資料的插入

適合以查詢和插入為主,只有少量按索引條件更新資料的應用

因為當有大量更新操作時,表級鎖的粒度太大,導致鎖衝突的概率太高

行級鎖開銷大,加鎖慢,會出現死鎖。併發度高

共享鎖(x)

排他鎖(x)

在innodb中為了支援鎖的多粒度,還增加了

意向共享鎖(is)

意向排他鎖(ix)

innodb實現行鎖的機制並不是直接給資料行加鎖,而是給索引加鎖,如果沒有通過索引檢索資料,則innodb將對資料庫中所有的記錄加鎖,效果和表級鎖類似。

適合用於大量按索引更新資料的應用

當有大量資料進行更新時,因為只鎖定需要用的資料,其他資料可以併發執行讀寫,但是當有多個表或者事務請求資源的順序不相同時,易出現死鎖

頁級鎖介於表級鎖和行級鎖之間,會出現死鎖,併發度一般

Mysql資料庫儲存引擎

儲存引擎是什麼?mysql中的資料用各種不同的技術儲存在檔案 或者記憶體 中。這些技術中的每一種技術都使用不同的儲存機制 索引技巧 鎖定水平並且最終提供廣泛的不同的功能和能力。通過選擇不同的技術,你能夠獲得額外的速度或者功能,從而改善你的應用的整體功能。例如,如果你在研究大量的臨時資料,你也許需要使...

資料庫 mysql儲存引擎

mysql常用的四種引擎的介紹 1 myisam儲存引擎 不支援事務 也不支援外來鍵,優勢是訪問速度快,對事務完整性沒有要求或者以select,insert為主的應用基本上可以用這個引擎來建立表,適合寫多的情況。frm儲存當前資料表的結構,myd儲存當前表的資料,myi儲存當前資料表的索引 支援表級...

mysql資料庫儲存引擎

我們在 mysql儲存引擎有哪些 一節中介紹了 mysql 中幾種主要的儲存引擎以及它們的使用特性,本節將介紹如何根據不同的應用場景去選擇合適的儲存引擎。在使用 mysql 資料庫管理系統時,選擇乙個合適的儲存引擎是乙個非常複雜的問題。不同的儲存引擎都有各自的特性 優勢和使用的場合,正確的選擇儲存引...