คำสั่ง SQL ALTER TABLE ใช้เพิ่ม เปลี่ยน หรือลบคอลัมน์ในตาราง คำสั่งนี้ให้คุณแก้ไขโครงสร้างตารางหลังสร้างแล้ว แม้ตารางจะมีข้อมูลอยู่
คุณอาจตัดสินใจเปลี่ยนแปลงตาราง SQL เช่น ต้องการเปลี่ยนชื่อคอลัมน์ หรือเพิ่มคอลัมน์ใหม่ การเปลี่ยนแปลงเหล่านี้ทำได้ด้วยคำสั่ง SQL ALTER TABLE
SQL ALTER TABLE
คำสั่ง ALTER TABLE ช่วยเปลี่ยนแปลงตารางที่มีอยู่โดย:
- เพิ่มคอลัมน์ (Add a column)
- เพิ่ม constraint (Add a constraint)
- ลบคอลัมน์ (Remove a column)
- เปลี่ยนชนิดข้อมูล (Change data type)
- เปลี่ยนชื่อคอลัมน์ (Rename a column)
บทช่วยสอนนี้จะอธิบายพร้อมตัวอย่าง วิธีแก้ไขตารางด้วยคำสั่ง SQL ALTER TABLE
เตรียมตารางตัวอย่าง
ในบทช่วยสอนนี้ เราจะแก้ไขตารางฐานข้อมูลของธุรกิจ เก็บข้อมูลพนักงานแต่ละคน ตารางชื่อ employees มีค่าดังนี้:
หลังสร้างตารางแล้ว เราพบว่าต้องการเปลี่ยนโครงสร้าง สามารถทำได้ด้วย SQL ALTER TABLE
เรียนรู้การสร้างตาราง: ดูคู่มือ SQL CREATE TABLE ของเรา
SQL ALTER TABLE: เพิ่มคอลัมน์ (Add Column)
สามารถเพิ่มคอลัมน์ในตาราง SQL ด้วย ALTER TABLE ไวยากรณ์:
ALTER TABLE table_name ADD column_name data_type constraints;
สมมติต้องการเพิ่มคอลัมน์ในตาราง "employees" เก็บเบอร์โทรศัพท์พนักงานทุกคน คอลัมน์ชื่อ "phone_number" ใช้ชนิดข้อมูล VARCHAR() (สตริงมีความยาวสูงสุด) ไม่มี constraints
คำสั่ง:
ALTER TABLE employees ADD phone_number VARCHAR(60);
คำสั่งเพิ่มคอลัมน์ใหม่ในตาราง "employees" ตอนนี้โครงสร้างตารางมีคอลัมน์ใหม่ "phone_number":
| Field | Type | Default |
| name | varchar(60) | NULL |
| title | varchar(60) | NULL |
| department | varchar(60) | NULL |
| employee_number | varchar(60) | NULL |
| phone_number | varchar(60) |
อยากเรียนรู้เพิ่มเติมเกี่ยวกับการเพิ่มคอลัมน์ใน SQL? ดูคู่มือ SQL add column ของเรา
SQL ALTER TABLE: เพิ่ม Constraint
ส่วนก่อนเราเพิ่มคอลัมน์ phone_number แต่ลืมเพิ่ม constraints
ในตัวอย่างนี้ หมายความว่าฐานข้อมูลอาจเก็บเบอร์โทรซ้ำสำหรับหลายพนักงาน ซึ่งไม่เป็นประโยชน์
แก้ไขด้วยการเพิ่ม constraint UNIQUE ให้คอลัมน์ "phone_number" ไวยากรณ์:
ALTER TABLE table_name ADD UNIQUE (column_name);
คำสั่งเพิ่ม constraint ให้คอลัมน์ "phone_number":
ALTER TABLE employees ADD UNIQUE (phone_number);
หากต้องการเพิ่ม constraint อื่น ให้แทน "UNIQUE" ด้วย SQL constraint อื่น
SQL ALTER TABLE: ลบคอลัมน์ (Remove Column)
สามารถใช้ ALTER TABLE ลบคอลัมน์จากตารางได้ ไวยากรณ์:
ALTER TABLE table_name DROP COLUMN column_name;
สมมติต้องการลบคอลัมน์ "department" จะสร้างคอลัมน์ใหม่เชื่อมโยงแผนกกับตารางอื่น คำสั่งลบ:
ALTER TABLE employees DROP COLUMN department;
หลังรันคำสั่ง คอลัมน์ "department" ถูกลบ โครงสร้างตารางตอนนี้:
| Field | Type | Default |
| name | varchar(60) | NULL |
| title | varchar(60) | NULL |
| employee_number | varchar(60) | NULL |
| phone_number | varchar(60) |
SQL ALTER TABLE: เปลี่ยนชนิดข้อมูลคอลัมน์ (Change Data Type)
ใช้ ALTER TABLE เปลี่ยนชนิดข้อมูลคอลัมน์ได้ ไวยากรณ์:
ALTER TABLE table_name ALTER COLUMN column_name new_data_type;
คำสั่งนี้มี 2 รูปแบบสำหรับ MySQL และ Oracle (pre-10G), และ Oracle 10G ขึ้นไป:
ALTER TABLE table_name MODIFY COLUMN column_name new_data_type; (MySQL, Oracle pre-10G) ALTER TABLE table_name MODIFY column_name new_data_type; (Oracle 10G+ and later)
ตอนสร้างตาราง "employees" เริ่มต้น เราผิดพลาดกำหนด "employee_number" เป็น VARCHAR() แทนตัวเลข แก้ไขด้วยคำสั่ง:
ALTER TABLE employees ALTER COLUMN employee_number INT;
คำสั่งเปลี่ยนชนิด "employee_number" เป็น INT โครงสร้างใหม่:
| Field | Type | Default |
| name | varchar(60) | NULL |
| title | varchar(60) | NULL |
| employee_number | varchar(60) | NULL |
| phone_number | int |
SQL ALTER TABLE: เปลี่ยนชื่อตาราง (Rename Table)
คำสั่ง ALTER TABLE ยังอนุญาตให้เปลี่ยนชื่อตาราง SQL ได้ ไวยากรณ์:
ALTER TABLE current_table RENAME new_table;
สมมติต้องการเปลี่ยนชื่อ "employees" เป็น "old_employees_2019" ใช้คำสั่ง:
ALTER TABLE employees RENAME old_employees_2019;
หมายเหตุ: ใน MySQL ไม่สามารถเปลี่ยนชื่อตารางด้วย ALTER TABLE ได้ ใช้คำสั่ง RENAME TABLE แทน:
RENAME TABLE employees TO old_employees_2019;
สรุป
คำสั่ง SQL ALTER TABLE ช่วยเปลี่ยนโครงสร้างตารางใน SQL คุณสามารถเพิ่ม ลบ หรือเปลี่ยนแปลงตารางในฐานข้อมูล เพิ่มเติมคุณสามารถแก้ไข constraints ที่เกี่ยวข้องกับตาราง เช่น UNIQUE หรือ NOT NULL
อยากเรียนรู้ SQL เพิ่มเติม? อ่านคู่มือ How to Learn SQL ของเรา มีเคล็ดลับและแหล่งเรียนรู้จากผู้เชี่ยวชาญ