Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

เปลี่ยน Storage Engine ของตารางใน MySQL ด้วย ALTER TABLE

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)MyISAMMemory
Transaction (ACID)✅ รองรับ❌ ไม่รองรับ❌ ไม่รองรับ
Row-level Locking✅ รองรับ❌ Table-level✅ รองรับ
Foreign Key✅ รองรับ❌ ไม่รองรับ❌ ไม่รองรับ
Full-text Search✅ (5.6+)✅ รองรับ❌ ไม่รองรับ
ข้อมูลหายเมื่อ Restart❌ ไม่หาย❌ ไม่หาย✅ หาย (อยู่ RAM)
เหมาะสำหรับOLTP, General purposeRead-heavy, AnalyticsCache, Temp data

ข้อควรระวัง

  • การเปลี่ยน Engine ต้อง Rebuild ตารางทั้งหมด (เวลานาน ขึ้นกับขนาดข้อมูล)
  • ตารางจะถูก Lock ระหว่างการเปลี่ยน (ใช้ ALGORITHM=INPLACE ในบางกรณีได้)
  • Foreign Key จะถูกลบถ้าเปลี่ยนไป Engine ที่ไม่รองรับ
  • ควร Backup ก่อนเปลี่ยน Engine ตารางสำคัญ