MySQL รองรับ Storage Engine หลายตัว (InnoDB, MyISAM, Memory, Archive, CSV, ฯลฯ) สามารถเปลี่ยน Engine ของตารางที่มีอยู่ได้ด้วย ALTER TABLE ... ENGINE
รูปแบบคำสั่ง
ALTER TABLE yourTableName ENGINE = EngineName;
ตัวอย่าง: เปลี่ยนจาก MyISAM เป็น InnoDB
1. สร้างตารางด้วย Engine MyISAM
mysql> CREATE TABLE ChangeEngineTableDemo (
-> MovieId INT,
-> MovieName VARCHAR(100),
-> IsPopular BOOL
-> ) ENGINE = 'MyISAM';
Query OK, 0 rows affected (0.37 sec)
2. เปลี่ยนเป็น InnoDB
mysql> ALTER TABLE ChangeEngineTableDemo ENGINE = InnoDB;
Query OK, 0 rows affected (2.21 sec)
3. ตรวจสอบ Engine ปัจจุบัน
mysql> SHOW CREATE TABLE ChangeEngineTableDemo;
+-----------------------+----------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-----------------------+----------------------------------------------------------------------------------------------------------------------------------+
| ChangeEngineTableDemo | CREATE TABLE `changeenginetabledemo` ( |
| | `MovieId` int(11) DEFAULT NULL, |
| | `MovieName` varchar(100) DEFAULT NULL, |
| | `IsPopular` tinyint(1) DEFAULT NULL |
| | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+-----------------------+----------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.03 sec)
เห็นว่า ENGINE=InnoDB แล้ว
วิธีตรวจสอบ Engine ทั้งหมดในฐานข้อมูล
SELECT TABLE_NAME, ENGINE
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'your_database';
เปรียบเทียบ Engine ยอดนิยม
| คุณสมบัติ | InnoDB (Default) | MyISAM | Memory |
|---|---|---|---|
| Transaction (ACID) | ✅ รองรับ | ❌ ไม่รองรับ | ❌ ไม่รองรับ |
| Row-level Locking | ✅ รองรับ | ❌ Table-level | ✅ รองรับ |
| Foreign Key | ✅ รองรับ | ❌ ไม่รองรับ | ❌ ไม่รองรับ |
| Full-text Search | ✅ (5.6+) | ✅ รองรับ | ❌ ไม่รองรับ |
| ข้อมูลหายเมื่อ Restart | ❌ ไม่หาย | ❌ ไม่หาย | ✅ หาย (อยู่ RAM) |
| เหมาะสำหรับ | OLTP, General purpose | Read-heavy, Analytics | Cache, Temp data |
ข้อควรระวัง
- การเปลี่ยน Engine ต้อง Rebuild ตารางทั้งหมด (เวลานาน ขึ้นกับขนาดข้อมูล)
- ตารางจะถูก Lock ระหว่างการเปลี่ยน (ใช้
ALGORITHM=INPLACEในบางกรณีได้) - Foreign Key จะถูกลบถ้าเปลี่ยนไป Engine ที่ไม่รองรับ
- ควร Backup ก่อนเปลี่ยน Engine ตารางสำคัญ