ค่าเริ่มต้นของ AUTO_INCREMENT คือ 1 แต่สามารถเปลี่ยนให้เริ่มจากหมายเลขอื่นได้ เช่น 1000 โดยใช้ ALTER TABLE ... AUTO_INCREMENT = value
รูปแบบคำสั่ง
ALTER TABLE yourTableName AUTO_INCREMENT = 1000;
ตัวอย่างขั้นตอน
1. สร้างตารางพร้อม AUTO_INCREMENT
mysql> CREATE TABLE PrimaryKey1000Demo (
-> ProductId INT AUTO_INCREMENT,
-> PRIMARY KEY(ProductId)
-> );
Query OK, 0 rows affected (0.56 sec)
2. ตั้งค่าเริ่มต้นที่ 1000
mysql> ALTER TABLE PrimaryKey1000Demo AUTO_INCREMENT = 1000;
Query OK, 0 rows affected (0.20 sec)
3. เพิ่มข้อมูลทดสอบ
mysql> INSERT INTO PrimaryKey1000Demo VALUES ();
mysql> INSERT INTO PrimaryKey1000Demo VALUES ();
mysql> INSERT INTO PrimaryKey1000Demo VALUES ();
mysql> INSERT INTO PrimaryKey1000Demo VALUES ();
4. ตรวจสอบลำดับ
mysql> SELECT * FROM PrimaryKey1000Demo;
+-----------+
| ProductId |
+-----------+
| 1000 |
| 1001 |
| 1002 |
| 1003 |
+-----------+
4 rows in set (0.00 sec)
กรณีตารางมีข้อมูลอยู่แล้ว
mysql> CREATE TABLE ExistingData (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50));
mysql> INSERT INTO ExistingData VALUES (1, 'A'), (2, 'B'), (3, 'C');
mysql> ALTER TABLE ExistingData AUTO_INCREMENT = 1000;
mysql> INSERT INTO ExistingData VALUES ('D'), ('E');
mysql> SELECT * FROM ExistingData;
+------+------+
| id | name |
+------+------+
| 1 | A |
| 2 | B |
| 3 | C |
| 1000 | D |
| 1001 | E |
+------+------+
5 rows in set (0.00 sec)
ค่าที่มีอยู่ (1,2,3) **ไม่เปลี่ยน** ค่าใหม่เริ่มจาก 1000 เพราะ 1000 > MAX(id)
ข้อควรระวัง
- ค่า
AUTO_INCREMENTต้อง **มากกว่า** ค่าสูงสุดที่มีอยู่ในตาราง (MAX + 1) - หากตั้งค่าต่ำกว่าหรือเท่ากับ MAX จะถูกปรับเป็น MAX + 1 อัตโนมัติ
- ไม่สามารถตั้งค่าติดลบได้
- ใช้ได้กับ Integer Types เท่านั้น (TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT)
ดูค่า AUTO_INCREMENT ปัจจุบัน
SHOW TABLE STATUS LIKE 'table_name';
-- หรือ
SELECT AUTO_INCREMENT
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'db_name' AND TABLE_NAME = 'table_name';
กรณีใช้งานจริง
- รหัสสินค้า/ลูกค้า/ใบสั่งซื้อ ที่ต้องการเริ่มจากเลขเฉพาะ (เช่น INV-1000)
- Merge Database หลายตัว กัน ID ชนกัน
- Migration จากระบบเก่าที่ ID เริ่มสูง
- Testing ต้องการ ID เฉพาะช่วง
รูปแบบรหัสรันนำหน้า (Prefix) - ใช้ Virtual Column (MySQL 5.7+)
CREATE TABLE invoices (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
invoice_code VARCHAR(20) GENERATED ALWAYS AS (CONCAT('INV-', LPAD(id, 6, '0'))) VIRTUAL,
...
);
-- ผล: INV-001000, INV-001001, ...