MYSQL 儲存引擎(表型別)

2021-10-05 05:15:26 字數 2400 閱讀 9598

外掛程式式儲存引擎是 mysql 資料庫最重要的特性之一,使用者可以根據應用的需要選擇如 何儲存和索引資料、是否使用事務等。mysql 預設支援多種儲存引擎,以適用於不同領域 的資料庫應用需要,使用者可以通過選擇使用不同的儲存引擎提高應用的效率,提供靈活的存 儲,使用者甚至可以按照自己的需要定製和使用自己的儲存引擎,以實現最大程度的可定製性。

myisam 不支援事務、也不支援外來鍵,其優勢是訪問的速度快,對事務完整性沒有要求或者以 select、insert 為主的應用基本上都可以使用 這個引擎來建立表。

每個 myisam 在磁碟上儲存成 3 個檔案,其檔名都和表名相同,但副檔名分別是: 

myisam 的表又支援 3 種不同的儲存格式:

innodb 儲存引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。但是對比myisam 的儲存引擎,innodb 寫的處理效率差一些並且會占用更多的磁碟空間以保留資料和索引。 

其具有的特點如下:

innodb 表的自動增長列可以手工插入,但是插入的值如果是空或者 0,則實際插入的將是自動增長後的值。可以通過「alter table *** auto_increment = n;」語句強制設定自動增長列的初始值, 預設從 1 開始,但是該強制的預設值是保留在記憶體中的,如果該值在使用之前資料庫重新啟 動,那麼這個強制的預設值就會丟失,就需要在資料庫啟動以後重新設定。

對於 innodb 表,自動增長列必須是索引。如果是組合索引,也必須是組合索引的第一 列,但是對於myisam 表,自動增長列可以是組合索引的其他列,這樣插入記錄後,自動增 長列是按照組合索引的前面幾列進行排序後遞增的。

mysql 支援外來鍵的儲存引擎只有 innodb,在建立外來鍵的時候,要求父表必須有對應的 索引,子表在建立外來鍵的時候也會自動建立對應的索引。在建立索引的時候,可以指定在刪除、更新父表時,對子表進行的相應操作, 包 restrict、 cascade、set null 和 no action。其中 restrict 和 no action 相同,是指限制在子表有 關聯記錄的情況下父表不能更新;cascade 表示父表在更新或者刪除時,更新或者刪除子表 對應記錄;set null 則表示父表在更新或者刪除的時候,子表的對應欄位被 set null。

innodb 儲存表和索引有以下兩種方式:

memory 儲存引擎使用存在記憶體中的內容來建立表。每個 memory 表只實際對應乙個 磁碟檔案,格式是.frm。memory 型別的表訪問非常得快,因為它的資料是放在記憶體中的, 並且預設使用 hash 索引,但是一旦服務關閉,表中的資料就會丟失掉。 

給 memory 表建立索引的時候,可以指定使用 hash 索引還是 btree 索引: 

create index mem_hash using hash on tab_memory (city_id) ;
在啟動 mysql 服務的時候使用--init-file 選項,把 insert into ... select 或 load data infile 這樣的語句放入這個檔案中,就可以在服務啟動時從持久穩固的資料來源裝載表。 

每個 memory 表中可以放置的資料量的大小,受到 max_heap_table_size 系統變數的約 束,這個系統變數的初始值是16mb,可以按照需要加大。此外,在定義 memory 表的時候, 可以通過 max_rows子句指定表的最大行數。

memory 型別的儲存引擎主要用在那些內容變化不頻繁的**表,或者作為統計操作 的中間結果表,便於高效地對中間結果進行分析並得到最終的統計結果。對 memory 儲存 引擎的表進行更新操作要謹慎,因為資料並沒有實際寫入到磁碟中,所以一定要對下次重新 啟動服務後如何獲得這些修改後的資料有所考慮。 

merge 儲存引擎是一組 myisam 表的組合,這些 myisam 表必須結構完全相同,merge 表本身並沒有資料,對 merge 型別的表可以進行查詢、更新、刪除的操作,這些操作實際 上是對內部的實際的 myisam 表進行的。

對於 merge 型別表的插入操作,是通過 insert_method 子句定義插入的表,可以有 3 個不同的值,使用 first 或 last 值使得插入 操作被相應地作用在第一或最後乙個表上,不定義這個子句或者定義為 no,表示不能對這 個 merge 表執行插入操作。 可以對 merge 表進行 drop 操作,這個操作只是刪除 merge 的定義,對內部的表沒有 任何的影響。 

merge 表在磁碟上保留兩個檔案,檔名以表的名字開始,乙個.frm 檔案儲存表定義, 另乙個.mrg 檔案包含組合表的資訊,包括 merge 表由哪些表組成、插入新的資料時的依據。 可以通過修改.mrg 檔案來修改 merge 表,但是修改後要通過 flush tables 重新整理。

MySQL的儲存引擎(表型別)

筆記 mysql屬於資料庫管理系統,包括資料庫和用於訪問管理資料庫的介面系統。資料庫負責儲存資料,介面系統負責管理資料庫。不同使用者對資料的容量 訪問速度 資料安全性有不用需求。為了滿足使用者的不同需求,mysql採用多種儲存引擎進行資料儲存。儲存引擎指定了表的儲存型別 即如何儲存和索引資料 是否支...

mysql 表型別(儲存引擎)的選擇

外掛程式式儲存引擎是mysql資料庫最重要的特性之一,使用者可以根據應用的需要選擇ruhr儲存和索引資料,是否使用事務等。innodb和bdb提供事務安全表,其他儲存引擎都是非事務安全表 建立新錶時如果不指定儲存引擎,那麼系統就會使用預設儲存引擎,mysql5.5之前的預設引擎時myisam,之後是...

MySQL表儲存引擎

常用的4種儲存引擎 myisam innodb memory和merge。myisam是mysql5.5版本之前的預設儲存引擎。myisam不支援事務 也不支援外來鍵,其優勢是訪問的速度快,對事務完整性沒有要求或者以select insert為主的應用基本上都可以使用這個引擎來建立表。資料儲存形式 ...