標籤:mysq 概述 amp cto 變數 check 預設 不同 null
一、MySQL支援外掛程式式儲存引擎,預設包括有多種儲存引擎,還可以自己定製化引擎,引擎是在表層級設定的。
二、各種儲存引擎的特性
(A) MyISAM :不支援事務、不支援外鍵、訪問速度快。
每個MyISAM表在磁碟上儲存成3個檔案,檔案名稱與表名相同,副檔名是:
(A1) frm (儲存表定義)
(A2) MYD (MYData, 儲存資料)
(A3) MYI (MYIndex, 儲存索引)
資料檔案和索引檔案可以放置在不同的目錄,平均分布IO,獲得更快的速度。可以在建立表的時候,指定該表的 DATA DIRECTORY
和 INDEX DIRECTORY 語句來分別指定路徑。
MyISAM表可能損壞,可以通過工具檢測和修複,表損壞可能導致資料庫異常重新啟動,需要儘快修複。支援三種儲存格式,分別是:
靜態(固定長度)表;欄位都是非變長欄位:儲存速度快,容易緩衝,故障易恢複,佔用空間多。注意:會去除欄位的尾部空格
動態表;包含變長欄位,可能產生片段,需定期最佳化表。佔用空間較多,故障不易恢複。
壓縮表;由 myisampack 工具建立,佔用空間非常小,每個記錄單獨壓縮,非常小的訪問開支。
(B) InnoDB :支援事務、支援外鍵,相比於MyISAM,寫入速度稍差一些,佔用空間稍多一些。
注意:使用 LAST_INSERT_ID() 查詢的只是當前線程最後插入記錄使用的值,並不是資料庫中最後插入記錄使用的值。
外部索引鍵關聯時:四種索取類型:
RESTRICT:限制在子表有關聯記錄的情況下,父表不能更新或者刪除;
NO ACTION:限制在子表有關聯記錄的情況下,父表不能更新或者刪除;
CASCADE:表示父表在更新或刪除時,相應地更新和刪除子表的記錄。
SET NULL:表示父表在更新或刪除時,子表的對應欄位被SET NULL。
當某個表被其他表建立了外鍵參照,那麼該表的對應索引或者主鍵禁止被刪除。
可以暫時關閉外鍵的檢測:SET FOREIGN_KEY_CHECKS=0。
InnoDB儲存表和索引有兩種方式:
使用共用資料表空間儲存,表結構在 .frm 檔案中,資料和索引檔案在 innodb_data_home_dir 和 innodb_data_file_path 定義的資料表空間中,可以是多個檔案。
使用多資料表空間儲存,表結構在 .frm 檔案中,每個表的資料和索引單獨在 .ibd 中。如果是分區表,這每個分區對應單獨的 .ibd 檔案,檔案名稱是“表名+分區名", 可以指定每個分區的資料檔案位置。
注意:即使在多資料表空間的儲存方式下,共用資料表空間還是必須的,InnoDB把內部資料詞典和未作日誌放在這個檔案中。
(C) MEMORY:使用記憶體中的內容來建立表。訪問速度快,預設是HASH索引,資料不可持久化。
每個MEMORY表只對應一個磁碟檔案,格式是 .frm。
每個MEMORY表的資料量大小,受到 max_heap_table_size 系統變數的約束,初始大小是16MB。
MEMORY表通常用於內容變化不頻繁的轉換碼錶,統計操作的中間結果表。注意該表資料的不持久化特性。
(D) MERGE:其實就是對多個結構完全相同的MyISAM表的合并表示。
MySQL儲存引擎概述