ตั้งค่า AUTO_INCREMENT เริ่มต้นที่ค่าที่ต้องการ
ใช้ ALTER TABLE ... AUTO_INCREMENT = value ตั้งค่าเริ่มต้นของ Auto Increment Column
ข้อจำกัด: AUTO_INCREMENT ต้องเป็น Key
MySQL ต้องการให้ Auto Increment Column เป็นส่วนหนึ่งของ Key (Primary Key หรือ Unique Index)
ตัวอย่าง: StudentStartId เริ่มที่ 1000 (ไม่ใช่ PK)
CREATE TABLE DemoTable639 (
StudentId INT PRIMARY KEY,
StudentStartId INT AUTO_INCREMENT,
StudentName VARCHAR(50),
INDEX(StudentStartId) -- ต้องมี Index
);
-- ตั้งค่าเริ่มต้น
ALTER TABLE DemoTable639 AUTO_INCREMENT = 1000;
INSERT INTO DemoTable639(StudentId, StudentName) VALUES
(1, 'John'), (2, 'Chris'), (3, 'Robert'), (4, 'David');
ผลลัพธ์:
+-----------+----------------+-------------+
| StudentId | StudentStartId | StudentName |
+-----------+----------------+-------------+
| 1 | 1000 | John |
| 2 | 1001 | Chris |
| 3 | 1002 | Robert |
| 4 | 1003 | David |
+-----------+----------------+-------------+
กรณีทั่วไป: Primary Key เริ่มที่ 1000
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100)
);
ALTER TABLE users AUTO_INCREMENT = 1000;
INSERT INTO users(name) VALUES('John'); -- id = 1000
ข้อควรระวัง
- AUTO_INCREMENT ต้องเป็น Key (PK หรือ Unique Index) - มิฉะจะ Error: "Incorrect table definition"
- ค่า AUTO_INCREMENT ต้อง > Max Existing Value - ไม่สามารถตั้งค่าต่ำกว่าค่าที่มีอยู่ได้
- TRUNCATE TABLE จะ Reset AUTO_INCREMENT - กลับไปที่ 1 (หรือค่าที่ ALTER ตั้งไว้)
- DELETE ไม่ Reset - ต่อจากค่าเดิม
Reset AUTO_INCREMENT
-- Reset ไปค่าที่ต้องการ
ALTER TABLE table_name AUTO_INCREMENT = 1000;
-- Reset ไป Max + 1 (หลัง Delete เยอะ)
ALTER TABLE table_name AUTO_INCREMENT = 1; -- จริงๆ จะไปที่ MAX(id)+1
ใช้ LAST_INSERT_ID() ดึงค่าที่เพิ่ง Generate
INSERT INTO users(name) VALUES('New User');
SELECT LAST_INSERT_ID(); -- คืนค่า Auto Increment ที่เพิ่ง Insert
MySQL 8.0: AUTO_INCREMENT Counter ใน Memory
MySQL 8.0 เก็บ Auto Increment Counter ใน Memory (Redo Log) ไม่ได้เก็บใน Disk ทุกครั้ง → เร็วขึ้น แต่ Restart อาจข้ามค่า (Gap) ได้
Alternative: Sequence (MySQL 8.0+ ไม่มี SEQUENCE Object ใช้ Table แทน)
CREATE TABLE seq_table (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
INSERT INTO seq_table VALUES (NULL);
SELECT LAST_INSERT_ID();