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 資料庫管理系統時,選擇乙個合適的儲存引擎是乙個非常複雜的問題。不同的儲存引擎都有各自的特性 優勢和使用的場合,正確的選擇儲存引...