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

MySQL: เพิ่มคอลัมน์ด้วย ALTER TABLE ADD COLUMN พร้อม DEFAULT

การเพิ่มคอลัมน์ใหม่พร้อมค่า Default ด้วย ALTER TABLE

คำสั่ง ALTER TABLE ... ADD COLUMN เพิ่มคอลัมน์ใหม่เข้าไปในตารางที่มีอยู่แล้ว สามารถระบุ DEFAULT value เพื่อให้แถวเก่าได้ค่าอัตโนมัติ

ไวยากรณ์ (Syntax)

ALTER TABLE yourTableName 
ADD COLUMN yourColumnName yourDataType DEFAULT yourValue;

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

สร้างตารางเดิม:

mysql> CREATE TABLE alterTableDemo (
    -> Id INT, Name VARCHAR(10)
    -> );
Query OK, 0 rows affected (0.69 sec)

ตรวจสอบโครงสร้าง:

mysql> DESC alterTableDemo;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| Id    | int(11)     | YES  |     | NULL    |       |
| Name  | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

เพิ่มคอลัมน์ Age พร้อม Default 18:

mysql> ALTER TABLE alterTableDemo ADD COLUMN Age INT DEFAULT 18;
Query OK, 0 rows affected (0.67 sec)
Records: 0 Duplicates: 0 Warnings: 0

ตรวจสอบโครงสร้างใหม่:

mysql> DESC alterTableDemo;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| Id    | int(11)     | YES  |     | NULL    |       |
| Name  | varchar(10) | YES  |     | NULL    |       |
| Age   | int(11)     | YES  |     | 18      |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

ทดสอบ INSERT ไม่ระบุ Age (จะได้ Default 18):

mysql> INSERT INTO alterTableDemo(Id, Name, Age) VALUES(100, 'Chris', 24);
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO alterTableDemo(Id, Name) VALUES(101, 'Robert');
Query OK, 1 row affected (0.25 sec)

ผลลัพธ์:

mysql> SELECT * FROM alterTableDemo;
+------+--------+------+
| Id   | Name   | Age  |
+------+--------+------+
| 100  | Chris  | 24   |
| 101  | Robert | 18   |
+------+--------+------+
2 rows in set (0.00 sec)

คำอธิบายและตัวเลือกเพิ่มเติม

  • DEFAULT 18 ใช้กับแถวเก่า (Existing rows) และแถวใหม่ที่ไม่ระบุค่า
  • NOT NULL DEFAULT 18 ห้าม NULL และมี Default
  • FIRST หรือ AFTER column_name ระบุตำแหน่งคอลัมน์: ADD COLUMN Age INT DEFAULT 18 AFTER Name
  • MySQL 8.0.12+ รองรับ ADD COLUMN ... INVISIBLE ซ่อนจาก SELECT *

ข้อควรระวังตารางใหญ่

การ ADD COLUMN พร้อม DEFAULT บนตารางขนาดใหญ่ (ล้านแถวขึ้นไป) อาจใช้เวลานานและ Lock ตาราง (MySQL < 8.0) MySQL 8.0+ ใช้ Instant ADD COLUMN สำหรับบางกรณี (ไม่ต้อง Rebuild ตาราง) ตรวจสอบด้วย EXPLAIN หรือดู Log