การเปลี่ยนค่าเริ่มต้นของ AUTO_INCREMENT ใน MySQL
คอลัมน์ AUTO_INCREMENT เริ่มจาก 1 โดยค่าเริ่มต้น สามารถเปลี่ยนค่าเริ่มต้นได้ 2 วิธี:
- ระบุตอนสร้างตาราง:
CREATE TABLE ... AUTO_INCREMENT = 1000 - เปลี่ยนภายหลัง:
ALTER TABLE table_name AUTO_INCREMENT = 1000
ตัวอย่าง: เริ่มจาก 1000 แทน 1
1. สร้างตารางปกติ (เริ่มจาก 1)
CREATE TABLE DemoTable (
UniqueNumber INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (UniqueNumber)
);
INSERT INTO DemoTable VALUES (), (), (), ();
2. ดูข้อมูล (เริ่มจาก 1)
SELECT * FROM DemoTable;
ผลลัพธ์: 1, 2, 3, 4
3. เปลี่ยน AUTO_INCREMENT เริ่มจาก 1000
ALTER TABLE DemoTable AUTO_INCREMENT = 1000;
4. เพิ่มข้อมูลใหม่
INSERT INTO DemoTable VALUES (), (), ();
5. ดูข้อมูลทั้งหมด
SELECT * FROM DemoTable;
ผลลัพธ์:
+--------------+
| UniqueNumber |
+--------------+
| 1 |
| 2 |
| 3 |
| 4 |
| 1000 |
| 1001 |
| 1002 |
+--------------+
ข้อสังเกตสำคัญ
- ค่า AUTO_INCREMENT ใหม่จะต้อง **มากกว่าค่าสูงสุดที่มีอยู่** (MAX + 1)
- หากตั้งค่าน้อยกว่าค่าสูงสุด MySQL จะปรับให้เป็น MAX + 1 เอง
- ค่าที่ข้ามไป (5-999) จะหายไปถาวร (Gap) - นี่เป็นพฤติกรรมปกติ
การตั้งค่าตอน CREATE TABLE
CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(50)
) AUTO_INCREMENT = 1000;
การดูค่า AUTO_INCREMENT ปัจจุบัน
SHOW TABLE STATUS LIKE 'DemoTable';
-- ดูคอลัมน์ Auto_increment
-- หรือ
SELECT AUTO_INCREMENT
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'DemoTable';
การ Reset AUTO_INCREMENT (หลัง TRUNCATE/DELETE)
-- TRUNCATE จะ reset เป็น 1 อัตโนมัติ
TRUNCATE TABLE DemoTable;
-- DELETE ไม่ reset ต้อง ALTER
DELETE FROM DemoTable;
ALTER TABLE DemoTable AUTO_INCREMENT = 1;
กรณีใช้งานจริง
- Merge Database: ป้องกัน ID ซ้ำระหว่าง Server
- Sharding: แต่ละ Shard ใช้ Range ต่างกัน (1-1M, 1M-2M, ...)
- Migration: รักษา ID เดิมจากระบบเก่า
- Testing: เริ่มจากเลขสูงเพื่อแยกจาก Production Data
ข้อจำกัด
- AUTO_INCREMENT ต้องเป็น PRIMARY KEY หรือ UNIQUE KEY แรก
- ตารางละ 1 คอลัมน์ AUTO_INCREMENT เท่านั้น
- ชนิดข้อมูล: INT, BIGINT, SMALLINT, TINYINT (UNSIGNED แนะนำ)