คำสั่งหลัก
ใช้ ALTER TABLE เพิ่มคอลัมน์และ index ในคำสั่งเดียว
รูปแบบคำสั่ง
ALTER TABLE yourTableName ADD COLUMN yourColumnName dataType, ADD INDEX(yourColumnName);
ตัวอย่างครบถ้วน
1. สร้างตารางเดิม
mysql> create table AddColumnAndIndexDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name varchar(100),
-> Address varchar(200)
-> );
Query OK, 0 rows affected (0.81 sec)
2. ดูโครงสร้างก่อน
mysql> desc AddColumnAndIndexDemo;
+---------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+----------------+ | Id | int(11) | NO | PRI | NULL | auto_increment | | Name | varchar(100) | YES | | NULL | | | Address | varchar(200) | YES | | NULL | | +---------+--------------+------+-----+---------+----------------+
3. เพิ่มคอลัมน์ Age และ Index พร้อมกัน
mysql> alter table AddColumnAndIndexDemo add column Age int, add index(Age); Query OK, 0 rows affected (1.81 sec) Records: 0 Duplicates: 0 Warnings: 0
4. ตรวจสอบโครงสร้างหลังเพิ่ม
mysql> desc AddColumnAndIndexDemo;
+---------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+----------------+ | Id | int(11) | NO | PRI | NULL | auto_increment | | Name | varchar(100) | YES | | NULL | | | Address | varchar(200) | YES | | NULL | | | Age | int(11) | YES | MUL | NULL | | +---------+--------------+------+-----+---------+----------------+
เห็นว่า Age มี Key = MUL = มี index (non-unique)
5. ตรวจสอบ Index โดยละเอียด
mysql> show index from AddColumnAndIndexDemo;
+-----------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | +-----------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ | addcolumnandindexdemo | 0 | PRIMARY | 1 | Id | A | 0 | NULL | NULL | | BTREE | | | YES | | addcolumnandindexdemo | 1 | Age | 1 | Age | A | 0 | NULL | NULL | YES | BTREE | | | YES | +-----------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
รูปแบบ Index เพิ่มเติม
-- Unique Index
ALTER TABLE t ADD COLUMN email VARCHAR(100), ADD UNIQUE INDEX idx_email (email);
-- Composite Index (หลายคอลัมน์)
ALTER TABLE t ADD COLUMN city VARCHAR(50), ADD COLUMN country VARCHAR(50),
ADD INDEX idx_city_country (city, country);
-- Fulltext Index (สำหรับ text search)
ALTER TABLE t ADD COLUMN content TEXT, ADD FULLTEXT INDEX idx_content (content);
-- Primary Key (ถ้ายังไม่มี)
ALTER TABLE t ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY FIRST;
Performance Note
- ADD COLUMN + ADD INDEX ในคำสั่งเดียว = table rebuild ครั้งเดียว (เร็วกว่าแยกคำสั่ง)
- ตารางใหญ่ อาจใช้เวลานาน → ควรทำใน maintenance window
- MySQL 8.0+ รองรับ Instant ADD COLUMN สำหรับบางケース (ไม่ rebuild)