สถานการณ์
มีตารางที่สร้างแล้ว (ไม่มี Auto Increment Column) ต้องการเพิ่มคอลัมน์ ID ใหม่ที่ Auto Increment เริ่มจากค่าที่กำหนด (เช่น 1000)
วิธีแก้: ใช้ ALTER TABLE ADD COLUMN + AUTO_INCREMENT
ตัวอย่างการใช้งาน
1. สร้างตารางเดิม (ไม่มี ID)
mysql> CREATE TABLE DemoTable (
-> StudentName VARCHAR(20)
-> );
Query OK, 0 rows affected (0.63 sec)
2. เพิ่มข้อมูล
mysql> INSERT INTO DemoTable VALUES('Robert');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable VALUES('Adam');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable VALUES('Mike');
Query OK, 1 row affected (0.12 sec)
3. เพิ่มคอลัมน์ StudentId พร้อม Auto Increment เริ่มที่ 1000
mysql> ALTER TABLE DemoTable
-> ADD COLUMN StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> AUTO_INCREMENT = 1000;
Query OK, 0 rows affected (1.83 sec)
Records: 0 Duplicates: 0 Warnings: 0
4. ตรวจสอบผลลัพธ์
mysql> SELECT * FROM DemoTable;
ผลลัพธ์:
+-------------+-----------+ | StudentName | StudentId | +-------------+-----------+ | Robert | 1000 | | Adam | 1001 | | Mike | 1002 | +-------------+-----------+ 3 rows in set (0.00 sec)
รายละเอียดคำสั่ง
ALTER TABLE table_name ADD COLUMN column_name INT NOT NULL AUTO_INCREMENT PRIMARY KEY, AUTO_INCREMENT = start_value;
ADD COLUMN- เพิ่มคอลัมน์ใหม่INT NOT NULL- Integer ไม่รับ NULLAUTO_INCREMENT- กำหนดให้ Auto IncrementPRIMARY KEY- ตั้งเป็น Primary Key (จำเป็นสำหรับ Auto Increment)AUTO_INCREMENT = 1000- กำหนดค่าเริ่มต้น
ข้อควรระวัง
- ตารางต้องไม่มี Primary Key อยู่แล้ว (หรือต้อง Drop PK เก่าก่อน)
- AUTO_INCREMENT ต้องเป็นส่วนของ Primary Key หรือ Unique Key
- ค่าเริ่มต้นต้องมากกว่าค่าสูงสุดที่มีอยู่ (ถ้ามีข้อมูลเดิม)
- การ ALTER TABLE บนตารางใหญ่ อาจ Lock ตารางนาน (ใช้ pt-online-schema-change หรือ ALGORITHM=INPLACE)
เปลี่ยนค่า Auto Increment ภายหลัง
ALTER TABLE DemoTable AUTO_INCREMENT = 2000;
กรณีการใช้งานจริง
- Merge Database: ป้องกัน ID ชนกันระหว่าง Server
- Legacy Migration: รักษา ID เดิม เริ่มใหม่จากช่วงว่าง
- Multi-tenant: Tenant A เริ่ม 10000, Tenant B เริ่ม 20000
- Test Data: เริ่มจากค่าสูงเพื่อแยกจาก Production Data
MySQL 8.0+ Feature: AUTO_INCREMENT Offset/Increment
-- สำหรับ Master-Master Replication SET @@auto_increment_increment = 2; SET @@auto_increment_offset = 1; -- Server 1: 1, 3, 5, 7... SET @@auto_increment_offset = 2; -- Server 2: 2, 4, 6, 8...