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

เปลี่ยน Data Type หลายคอลัมน์พร้อมกันใน MySQL ใช้ MODIFY COLUMN


ไวยากรณ์ MODIFY หลายคอลัมน์ในคำสั่งเดียว

ใช้ ALTER TABLE ร่วมกับ MODIFY COLUMN หลายครั้ง คั่นด้วยจุลภาค:

ALTER TABLE your_table
MODIFY COLUMN col1 new_data_type,
MODIFY COLUMN col2 new_data_type,
MODIFY COLUMN col3 new_data_type;

ตัวอย่างการใช้งาน

สร้างตารางเดิม (INT, VARCHAR(200))

CREATE TABLE AddColumn (
    StudentID INT,
    StudentName VARCHAR(200)
);

เปลี่ยนทั้ง 2 คอลัมน์พร้อมกัน

ALTER TABLE AddColumn
MODIFY COLUMN StudentName VARCHAR(300),
MODIFY COLUMN StudentID VARCHAR(50);

ตรวจสอบโครงสร้างหลังเปลี่ยน

DESC AddColumn;
+-------------+--------------+------+-----+---------+-------+
| Field       | Type         | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| StudentId   | varchar(50)  | YES  |     | NULL    |       |
| StudentName | varchar(300) | YES  |     | NULL    |       |
+-------------+--------------+------+-----+---------+-------+

MODIFY vs CHANGE

คำสั่ง เปลี่ยนชื่อคอลัมน์ได้ไหม เปลี่ยน Data Type ได้ไหม เปลี่ยนตำแหน่งได้ไหม
MODIFY COLUMN ไม่ได้ ได้ ไม่ได้ (ต้องใช้ CHANGE)
CHANGE COLUMN ได้ ได้ ได้ (FIRST/AFTER)

ข้อควรระวัง

  • Data Loss: การลดขนาด (VARCHAR(300) -> VARCHAR(50)) อาจตัดข้อมูล
  • Incompatible Types: VARCHAR -> INT จะ Error หากมีข้อมูลไม่ใช่ตัวเลข
  • Index/Constraint: อาจต้อง Drop Index ก่อน แล้วสร้างใหม่
  • Performance: ตารางใหญ่ Lock นาน ควรใช้ pt-online-schema-change (Percona Toolkit)

MySQL 8.0+ Instant DDL

บางการเปลี่ยน Data Type รองรับ Instant (ไม่ Rebuild ตาราง) เช่น:

  • ขยาย VARCHAR (เพิ่มขนาด)
  • เพิ่ม/ลบ Default Value
  • เพิ่ม/ลบ Column (ท้ายตาราง)