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

วัตถุประสงค์ของคำสั่ง CHANGE ใน MySQL: เปลี่ยนชื่อ Column

คำสั่ง ALTER TABLE ... CHANGE

CHANGE ใช้สำหรับ เปลี่ยนชื่อ Column และ/หรือ เปลี่ยน Data Type/Attributes พร้อมกัน

Syntax

ALTER TABLE table_name 
CHANGE old_column_name new_column_name column_definition;

ตัวอย่าง: เปลี่ยนชื่อ Column Name → StudentName

CREATE TABLE DemoTable796 (
    StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Name VARCHAR(100),
    StudentAge INT
);

-- ตรวจสอบโครงสร้างก่อน
DESC DemoTable796;

-- เปลี่ยนชื่อ Column
ALTER TABLE DemoTable796 
CHANGE Name StudentName VARCHAR(100);

-- ตรวจสอบหลังเปลี่ยน
DESC DemoTable796;

ก่อนเปลี่ยน:

+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| StudentId  | int(11)      | NO   | PRI | NULL    | auto_increment |
| Name       | varchar(100) | YES  |     | NULL    |                |
| StudentAge | int(11)      | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

หลังเปลี่ยน:

+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| StudentId   | int(11)      | NO   | PRI | NULL    | auto_increment |
| StudentName | varchar(100) | YES  |     | NULL    |                |
| StudentAge  | int(11)      | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+

CHANGE vs MODIFY vs RENAME COLUMN

คำสั่งเปลี่ยนชื่อได้ไหมเปลี่ยน Data Type ได้ไหมรองรับ MySQL Version
CHANGEได้ได้ทุก Version
MODIFYไม่ได้ได้ทุก Version
RENAME COLUMNได้ไม่ได้8.0+

ตัวอย่าง MODIFY (เปลี่ยน Type อย่างเดียว)

-- เปลี่ยน VARCHAR(100) → VARCHAR(200) และเพิ่ม NOT NULL
ALTER TABLE DemoTable796 
MODIFY StudentName VARCHAR(200) NOT NULL;

ตัวอย่าง RENAME COLUMN (MySQL 8.0+)

-- เปลี่ยนชื่ออย่างเดียว ไม่ต้องระบุ Data Type ซ้ำ
ALTER TABLE DemoTable796 
RENAME COLUMN StudentName TO FullName;

ข้อควรระวัง

  • CHANGE ต้องระบุ Column Definition ครบ (Type, Null, Default, Comment) - ไม่อยากเปลี่ยนก็ต้อง Copy มาใหม่
  • Foreign Key: ถ้าคอลัมน์ถูก Reference โดย FK ต้อง Drop FK ก่อน
  • Index: Index บนคอลัมน์จะยังคงอยู่ (ยกเว้น Primary Key)
  • View/Stored Procedure: อาจ Broken หากอ้างอิงชื่อคอลัมน์เก่า
  • Replication: ต้อง Run บน Master และ Slave ให้ตรงกัน

Best Practice

  1. Backup ก่อน ALTER TABLE ตารางใหญ่
  2. ใช้ pt-online-schema-change (Percona Toolkit) สำหรับตาราง Production ใหญ่ เพื่อไม่ Lock ตาราง
  3. ทดสอบบน Staging ก่อน Production