台北市松山區八德路四段666號7樓之3
(02)2528-0119 gsld_sales@gsld.com.tw

MySQL 儲存引擎

MySQL 儲存引擎

MySQL 有儲存引擎的概念,使用者可以依照自己的需求,選擇使用不同的儲存引擎來提高應用的效率,我們可以透過 MySQL 輸入以下指令,就可以看出目前支援了哪些引擎,以及預設的儲存引擎。

mysql > show engines;
https://ithelp.ithome.com.tw/upload/images/20200912/20129969UdSzowHOs0.png

接下來我們就來了解一下常用的儲存引擎吧!

MyISAM

MyISAM不支援事務與外鍵,但連接的速度快,適合不需要事務或者是以select & insert為主的表應用。
每一個以MyISAM建立的表,在硬碟中都會儲存三個檔案,檔案的名稱都會與表名一樣,三個檔案分別是:
[table_name]_數字.frm:儲存表的詳細訊息
[table_name].myd:資料檔
[table_name].myi:索引檔

InnoDB

InnoDB有commit、rollback事務功能,但與MyISAM相比,寫入的效率稍差,會占用到較多的硬碟空間,除了上述,比較特別的是MySQL中只有Innodb有foreign(外鍵)的功能。
Innodb的資料與索引都是存在同一個檔案,但儲存方式有兩種,可以透過innodb_file_per_table參數調整,決定要儲存在共同表的空間(ibdata),或是將每個表分開。
若開啟innodb_file_per_table參數,每個表則會有一個[table_name].ibd的檔案。

Foerign key外鍵

外鍵可以指向其他表的主鍵,限制欄位值只能來自另一個表的主鍵欄位,用來確定資料完整性。
以下我們來簡單示範看看,外鍵的用法吧!
產品資料表product

itemprice
apple20
orange15
pineapple50

客戶訂單form

Customeritemcount

我們要限制的是item(品項),因為除了這三樣水果,我們也沒有賣其他的了,如果可以下訂單就太奇怪了。

建立product table
若要限制item,item就必須要是primary key

mysql> create table product(item varchar(20), price int ,primary key(item));

建立form table

mysql> create table form (customer varchar(20),item varchar(20),count int,foreign key(item) references product(item));

這樣的話在form表格中,就無法新增除了apple、orange、pineaplle這三項的水果了。

Memory

Memory建立表時是直接儲存在記憶體中,在連接表時非常快
,每個表只會實際對應一個磁碟檔.sdi,但只要服務一關閉,資料將會全遺失。

今天先介紹幾個較常用的engine,但說了那麼多都還沒分享要怎麼設定engine,
以下指令就是在建立表時設定engine的方式。

mysql> create table t1 (id int)engine=[myisam;innodb;memory];

如果要查看表的engine可以輸入

mysql> show create table [table_name];

參考資料: https://www.fooish.com/sql/foreign-key-constraint.html

No Comments Yet.

Leave a comment