ใช้ ALTER TABLE ... MODIFY COLUMN เพื่อเปลี่ยนขนาด VARCHAR
ไวยากรณ์
ALTER TABLE yourTableName MODIFY COLUMN yourColumnName VARCHAR(100) NOT NULL;
สร้างตารางตัวอย่าง
mysql> CREATE TABLE syntaxOfAlterCommandDemo (
-> UserId INT,
-> UserName VARCHAR(30),
-> UserAge INT,
-> UserCityName VARCHAR(50)
-> );
ตรวจสอบโครงสร้างก่อน (UserName = VARCHAR(30))
mysql> DESC syntaxOfAlterCommandDemo;
ผลลัพธ์:
+--------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+-------+ | UserId | int(11) | YES | | NULL | | | UserName | varchar(30) | YES | | NULL | | | UserAge | int(11) | YES | | NULL | | | UserCityName | varchar(50) | YES | | NULL | | +--------------+-------------+------+-----+---------+-------+
เปลี่ยน UserName เป็น VARCHAR(100) NOT NULL
mysql> ALTER TABLE syntaxOfAlterCommandDemo
-> MODIFY COLUMN UserName VARCHAR(100) NOT NULL;
Query OK, 0 rows affected (1.36 sec)
ตรวจสอบโครงสร้างหลังเปลี่ยน (UserName = VARCHAR(100) NOT NULL)
mysql> DESC syntaxOfAlterCommandDemo;
ผลลัพธ์:
+--------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+--------------+------+-----+---------+-------+ | UserId | int(11) | YES | | NULL | | | UserName | varchar(100) | NO | | NULL | | | UserAge | int(11) | YES | | NULL | | | UserCityName | varchar(50) | YES | | NULL | | +--------------+--------------+------+-----+---------+-------+
ข้อสังเกตสำคัญ
MODIFY COLUMNใช้เปลี่ยนชนิดข้อมูล ขนาด DEFAULT NOT NULL เป็นต้นCHANGE COLUMNใช้เปลี่ยนชื่อคอลัมน์ (และชนิดข้อมูลได้ด้วย)- การขยายขนาด (30 -> 100) ปลอดภัย ไม่สูญเสียข้อมูล
- การลดขนาด (100 -> 30) อาจตัดข้อมูลที่ยาวเกินไป (Data Truncation)
- เพิ่ม
NOT NULLต้องแน่ใจว่าไม่มีค่า NULL อยู่ในคอลัมน์นั้น
คำสั่ง ALTER อื่นๆ ที่น่าสนใจ
ADD COLUMNเพิ่มคอลัมน์DROP COLUMNลบคอลัมน์RENAME COLUMN old_name TO new_name(MySQL 8.0+)ALTER TABLE ... RENAME TO new_table_nameเปลี่ยนชื่อตาราง