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

เปลี่ยน Definition ของ Column ใน MySQL (ALTER TABLE MODIFY/CHANGE)

ใช้ ALTER TABLE ... MODIFY COLUMN (เปลี่ยน Type/Constraint คงชื่อ) หรือ CHANGE COLUMN (เปลี่ยนชื่อ + Type/Constraint)

สร้างตาราง

mysql> CREATE TABLE ModifyColumnDemo (id INT);

MODIFY COLUMN: เปลี่ยน INT → VARCHAR(10) NOT NULL

mysql> ALTER TABLE ModifyColumnDemo 
    -> MODIFY COLUMN id VARCHAR(10) NOT NULL;
Query OK, 0 rows affected (1.52 sec)

ตรวจสอบผลลัพธ์

mysql> DESC ModifyColumnDemo;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | varchar(10) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

CHANGE COLUMN: เปลี่ยนชื่อ + Type

mysql> ALTER TABLE ModifyColumnDemo 
    -> CHANGE COLUMN id new_id VARCHAR(20) NOT NULL;

MODIFY vs CHANGE

คำสั่งเปลี่ยนชื่อได้?SyntaxUse Case
MODIFY COLUMNไม่ได้MODIFY COLUMN col_name new_definitionเปลี่ยน Type, Null, Default, Comment
CHANGE COLUMNได้CHANGE COLUMN old_name new_name new_definitionRename + เปลี่ยน Definition

ข้อควรระวัง

  • การเปลี่ยน Type อาจล้มเหลวหาก Data ไม่ Convert ได้ (เช่น VARCHAR 'abc' → INT)
  • ตารางใหญ่ → Lock นาน ควรใช้ pt-online-schema-change (Percona) หรือ gh-ost (GitHub)
  • MySQL 8.0+ รองรับ INSTANT DDL สำหรับบาง Operation (ADD COLUMN LAST, DROP COLUMN, RENAME COLUMN)
Best Practice: ทดสอบบน Staging ก่อน Production, Backup ก่อน ALTER, ใช้ Tool Online Schema Change สำหรับตาราง Production ใหญ่