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

ลบ Column จากตาราง MySQL (ALTER TABLE DROP COLUMN)

ใช้ ALTER TABLE ... DROP COLUMN ลบคอลัมน์ (รองรับลบหลายคอลัมน์พร้อมกัน)

สร้างตาราง 4 คอลัมน์

mysql> CREATE TABLE DeleteColumnNameDemo (
    -> Id INT,
    -> Name VARCHAR(200),
    -> Age INT,
    -> Address VARCHAR(200)
    -> );

ดูโครงสร้างก่อน

mysql> DESC DeleteColumnNameDemo;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| Id      | int(11)      | YES  |     | NULL    |       |
| Name    | varchar(200) | YES  |     | NULL    |       |
| Age     | int(11)      | YES  |     | NULL    |       |
| Address | varchar(200) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+

ลบ Column Age และ Address

mysql> ALTER TABLE DeleteColumnNameDemo 
    -> DROP COLUMN Age, 
    -> DROP COLUMN Address;
Query OK, 0 rows affected (3.11 sec)

ดูโครงสร้างหลังลบ

mysql> DESC DeleteColumnNameDemo;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| Id    | int(11)      | YES  |     | NULL    |       |
| Name  | varchar(200) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+

ข้อควรระวัง

  • Data Loss: ข้อมูลใน Column ที่ลบ จะหายถาวร (Backup ก่อน)
  • Dependencies: หาก Column ถูกใช้ใน Index, FK, View, Trigger, Partition → ต้อง Drop Dependency ก่อน
  • Lock: DROP COLUMN ต้อง Rebuild Table (Lock) ใช้ pt-online-schema-change หรือ gh-ost สำหรับ Production ใหญ่
  • Instant DDL (MySQL 8.0.13+): DROP COLUMN ยังไม่รองรับ Instant (ต้อง Rebuild)

ลบ Column ที่มี Index/FK

-- ต้อง Drop Index/FK ก่อน
ALTER TABLE t DROP FOREIGN KEY fk_name;
ALTER TABLE t DROP INDEX idx_name;
ALTER TABLE t DROP COLUMN col_name;
Best Practice: แทน DROP COLUMN ให้ SET NULL / RENAME Column / ADD New Column แล้ว Migrate Data ค่อย Drop เก่า (Safer, Rollback ได้)