(轉載)淺談MySql的存儲引擎(表類型)

[size=large]什麼是MySql數據庫[/size]

通常意義上,數據庫也就是數據的集合,具體到計算機上數據庫可以是存儲器上一些文件的集合或者一些內存數據的集合。
我們通常說的MySql數據庫,sql server數據庫等等其實是數據庫管理系統,它們可以存儲數據,並提供查詢和更新數據庫中的數據的功能等等。根據數據庫如何存儲數據和如何操作數據的實現機制不同,這些數據庫之間即有區別又有共同點。
MySql數據庫是開放源代碼的關係型數據庫。目前,它可以提供的功能有:支持sql語言、子查詢、存儲過程、觸發器、視圖、索引、事務、鎖、外鍵約束和影像複製等。在後期,我們會詳細講解這些功能。
同Oracle 和SQL Server等大型數據庫系統一樣,MySql也是客戶/服務器系統並且是單進程多線程架構的數據庫。
MySql區別於其它數據庫系統的一個重要特點是支持插入式存儲引擎。

[size=large]那麼什麼是存儲引擎呢?[/size]
存儲引擎說白了就是如何存儲數據、如何爲存儲的數據建立索引和如何更新、查詢數據等技術的實現方法。因爲在關係數據庫中數據的存儲是以表的形式存儲的,所以存儲引擎也可以稱爲表類型(即存儲和操作此表的類型)。
在Oracle 和SQL Server等數據庫中只有一種存儲引擎,所有數據存儲管理機制都是一樣的。而MySql數據庫提供了多種存儲引擎。用戶可以根據不同的需求爲數據表選擇不同的存儲引擎,用戶也可以根據自己的需要編寫自己的存儲引擎。

[size=large]MySql中有哪些存儲引擎?[/size]
[color=red] 1 MyISAM:[/color]這種引擎是mysql最早提供的。MyISAM管理非事務表。它提供高速存儲和檢索,以及全文搜索能力。MyISAM在所有MySQL配置裏被支持,它是默認的存儲引擎,除非你配置MySQL默認使用另外一個引擎。這種引擎又可以分爲靜態MyISAM、動態MyISAM 和壓縮MyISAM三種:
[b]靜態MyISAM:[/b]如果數據表中的各數據列的長度都是預先固定好的,服務器將自動選擇這種表類型。因爲數據表中每一條記錄所佔用的空間都是一樣的,所以這種表存取和更新的效率非常高。當數據受損時,恢復工作也比較容易做。
[b]動態MyISAM:[/b]如果數據表中出現varchar、xxxtext或xxxBLOB字段時,服務器將自動選擇這種表類型。相對於靜態MyISAM,這種表存儲空間比較小,但由於每條記錄的長度不一,所以多次修改數據後,數據表中的數據就可能離散的存儲在內存中,進而導致執行效率下降。同時,內存中也可能會出現很多碎片。因此,這種類型的表要經常用optimize table 命令或優化工具來進行碎片整理。
[b]壓縮MyISAM:[/b]以上說到的兩種類型的表都可以用myisamchk工具壓縮。這種類型的表進一步減小了佔用的存儲,但是這種表壓縮之後不能再被修改。另外,因爲是壓縮數據,所以這種表在讀取的時候要先時行解壓縮。
但是,不管是何種MyISAM表,目前它都不支持事務,行級鎖和外鍵約束的功能。
[color=red]2 MyISAM Merge引擎:[/color]這種類型是MyISAM類型的一種變種。合併表是將幾個相同的MyISAM表合併爲一個虛表。常應用於日誌和數據倉庫。
[color=red]3 InnoDB:[/color]InnoDB表類型可以看作是對MyISAM的進一步更新產品,它提供了事務、行級鎖機制和外鍵約束的功能。InnoDB和BDB存儲引擎提供事務安全表。BDB被包含在爲支持它的操作系統發佈的MySQL-Max二進制分發版裏。InnoDB也 默認被包括在所有MySQL 5.1二進制分發版裏,你可以按照喜好通過配置MySQL來允許或禁止任一引擎。
[color=red]4 memory(heap):[/color]這種類型的數據表只存在於內存中。它使用散列索引,所以數據的存取速度非常快。因爲是存在於內存中,所以這種類型常應用於臨時表中。MEMORY存儲引擎提供“內存中”表。MERGE存儲引擎允許集合將被處理同樣的MyISAM表作爲一個單獨的表。就像MyISAM一樣,MEMORY和MERGE存儲引擎處理非事務表,這兩個引擎也都被 默認包含在MySQL中。
[b]註釋:[/b]MEMORY存儲引擎正式地被確定爲HEAP引擎。
[color=red]5 archive:[/color]這種類型只支持select 和 insert語句,而且不支持索引。常應用於日誌記錄和聚合分析方面。
[color=red]6 EXAMPLE: [/color]存儲引擎是一個“存根”引擎,它不做什麼。你可以用這個引擎創建表,但沒有數據被存儲於其中或從其中檢索。這個引擎的目的是服務 ,在MySQL源代碼中的一個例子,它演示說明如何開始編寫新存儲引擎。同樣,它的主要興趣是對開發者。

下面我們介紹一下如何查看和設置數據表類型。
[size=large]
MySql中關於存儲引擎的操作[/size]
[color=red]
1 查看數據庫可以支持的存儲引擎[/color]
用show engines; 命令可以顯示當前數據庫支持的存儲引擎情況,如圖1所示:

圖1 數據庫的存儲引擎

[img]http://dl2.iteye.com/upload/attachment/0086/7378/828fde1a-9e30-3878-a14b-3da32dde7aae.jpg[/img]

由上圖可見當前系統的默認數據表類型是MyISAM。當然,我們可以通過修改數據庫配置文件中的選項,設定默認表類型。

[color=red] 2 查看錶的結構等信息的若干命令[/color]
要查看錶的定義結構等信息可以使用以下幾種命令:
2.1[b]Desc[ribe] tablename;[/b] //查看數據表的結構
例如,查看錶t1的結構,可得下圖。

圖2:查看錶t1的結構


[img]http://dl2.iteye.com/upload/attachment/0086/7380/8c6c3ac2-1c62-34d4-b2a5-86f2b07f2875.jpg[/img]

2.2 [b]Show create table tablename;[/b]
//顯示錶的創建語句
同上查詢表t1,得下圖:

[img]http://dl2.iteye.com/upload/attachment/0086/7382/1e90b67f-bb9f-343f-a394-707286fe3e21.jpg[/img]
圖3 顯示創建表t1的語句

2.3 [b]show table status like ‘tablename’[/b]\G顯示錶的當前狀態值

同上查詢表t1,得下圖:

圖4 顯示錶t1 的當前狀態值

[img]http://dl2.iteye.com/upload/attachment/0086/7384/adf95ab4-10b8-37d6-aea9-aaf02336a63b.jpg[/img]

綜上可見,後兩種方式都可以幫助我們查看某一表的存儲引擎類型(圖中已用紅色方框標出)。
[color=red] 3 設置或修改表的存儲引擎[/color]
3.1創建數據庫表時設置存儲存儲引擎的基本語法是:
[b]Create table tableName(
columnName(列名1) type(數據類型) attri(屬性設置),
columnName(列名2) type(數據類型) attri(屬性設置),
……..) engine = engineName[/b]

例如,假設要創建一個名爲user的表,此表包括id,用戶名username和性別sex三個字段,並且要設置表類型爲merge。則可用如下的方式創建此數據表,

create table user(

id int not null auto_increment,

username char(20) not null,

sex char(2),

primary key(id)

) engine=merge

具體執行結果見下圖:

圖5 創建表user

[img]http://dl2.iteye.com/upload/attachment/0086/7386/eb21944c-6202-3822-8c56-48bdd845330c.jpg[/img]

查看創建後表user的信息,可見表的當前存儲引擎是merge,如圖所示:

圖6 顯示錶t1 的當前狀態值

[img]http://dl2.iteye.com/upload/attachment/0086/7388/2c864ac2-261d-3858-a9e5-544b8f648881.jpg[/img]

3.2修改存儲引擎,可以用命令[b]Alter table tableName engine =engineName[/b]

假如,若需要將表user的存儲引擎修改爲archive類型,則可使用命令alter table user engine=archive。如下圖所示:

圖7 修改表user的存儲引擎

[img]http://dl2.iteye.com/upload/attachment/0086/7390/304c8f9c-9fd9-307b-9ffb-837b332e24a5.jpg[/img]

查看修改後的表類型,可見表類型已經變爲archive類型。

圖8 顯示錶user修改後的狀態值

[img]http://dl2.iteye.com/upload/attachment/0086/7392/6ecd39b7-898b-33be-b518-c97935dbd064.jpg[/img]

小結
在本文中主要介紹了什麼是MySql數據庫,並進一步引出了它的一個重要特性, 即插入式的多存儲引擎機制。然後,簡單介紹了什麼是存儲引擎和MySql中幾種主要的存儲引擎。最後,介紹瞭如何查看數據庫支持的所有存儲引擎,如何查看數據庫表的存儲引擎類型及如何設置或修改表的存儲引擎類型。剛剛入門學習MySql,文中有錯誤之處,還請大家多多指導!

轉載自:[url]http://www.cnblogs.com/lina1006/archive/2011/04/29/2032894.html[/url]
發佈了62 篇原創文章 · 獲贊 1 · 訪問量 2893
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章