เมื่อต้องการเปลี่ยนค่า Default ของคอลัมน์ที่มีอยู่แล้ว ให้ใช้ ALTER TABLE ... MODIFY ระบุ Data Type เดิมพร้อม Default ใหม่
สร้างตารางมี Default 'John'
mysql> create table DemoTable (
UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserName varchar(20) DEFAULT 'John'
);
ตรวจสอบ Default เดิม
mysql> desc DemoTable;
+----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+----------------+ | UserId | int(11) | NO | PRI | NULL | auto_increment | | UserName | varchar(20) | YES | | John | | +----------+-------------+------+-----+---------+----------------+
ทดสอบ Default เดิม (INSERT ไม่ระบุ Name)
mysql> insert into DemoTable values();
+--------+----------+ | UserId | UserName | +--------+----------+ | 1 | John | +--------+----------+
เปลี่ยน Default เป็น 'Chris'
mysql> alter table DemoTable modify UserName varchar(20) DEFAULT 'Chris';
ตรวจสอบหลังเปลี่ยน
mysql> desc DemoTable;
+----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+----------------+ | UserId | int(11) | NO | PRI | NULL | auto_increment | | UserName | varchar(20) | YES | | Chris | | +----------+-------------+------+-----+---------+----------------+
ทดสอบ Default ใหม่
mysql> insert into DemoTable values();
+--------+----------+ | UserId | UserName | +--------+----------+ | 1 | John | | 2 | Chris | +--------+----------+
Syntax
ALTER TABLE table_name MODIFY column_name data_type DEFAULT new_default;
ข้อสังเกตสำคัญ
- ข้อมูลเก่าไม่เปลี่ยน - แถวที่ Insert ก่อนเปลี่ยน Default ยังคงค่าเดิม (John)
- ต้องระบุ Data Type ใหม่ทั้งหมด - แม้จะไม่เปลี่ยน Type ก็ต้องเขียนซ้ำ
- DROP DEFAULT - ลบ Default:
ALTER TABLE t MODIFY col VARCHAR(20) DEFAULT NULL; - NOT NULL + DEFAULT - ต้องระบุ DEFAULT หากเพิ่ม NOT NULL
CHANGE vs MODIFY
-- CHANGE (เปลี่ยนชื่อได้) ALTER TABLE DemoTable CHANGE UserName UserName VARCHAR(20) DEFAULT 'Chris'; -- MODIFY (ไม่เปลี่ยนชื่อ - สั้นกว่า) ALTER TABLE DemoTable MODIFY UserName VARCHAR(20) DEFAULT 'Chris';
MySQL 8.0+ ใช้ ALTER COLUMN ... SET DEFAULT
ALTER TABLE DemoTable ALTER COLUMN UserName SET DEFAULT 'Chris';
(Syntax มาตรฐาน SQL Standard)