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

เพิ่มคอลัมน์ใหม่และสร้าง Index พร้อมกันใน MySQL ด้วย ALTER TABLE


คำสั่งหลัก

ใช้ 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)