iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 8
1
AI & Data

一名合格的DBA要從底層一步步爬起系列 第 8

《Day8》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

item price
apple 20
orange 15
pineapple 50

客戶訂單form

Customer item count

我們要限制的是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


上一篇
《Day7》MySQL binary 安裝
下一篇
《Day9》MySQL 權限與安全性
系列文
一名合格的DBA要從底層一步步爬起30

尚未有邦友留言

立即登入留言