Syntax: AUTO_INCREMENT ใน CREATE TABLE
mysql> CREATE TABLE DemoTable1907 (
UserId INT NOT NULL AUTO_INCREMENT,
UserName VARCHAR(20),
UserAge INT,
UserCountryName VARCHAR(20),
PRIMARY KEY(UserId)
) ENGINE=MyISAM, AUTO_INCREMENT=100;
Insert ข้อมูล (ไม่ระบุ UserId)
mysql> INSERT INTO DemoTable1907(UserName, UserAge, UserCountryName) VALUES
('Chris', 26, 'US'),
('David', 38, 'UK'),
('John', 28, 'AUS');
ผลลัพธ์ (เริ่มจาก 100)
+--------+----------+---------+-----------------+
| UserId | UserName | UserAge | UserCountryName |
+--------+----------+---------+-----------------+
| 100 | Chris | 26 | US |
| 101 | David | 38 | UK |
| 102 | John | 28 | AUS |
+--------+----------+---------+-----------------+
ENGINE และ AUTO_INCREMENT
ENGINE=MyISAM: รองรับ AUTO_INCREMENT ใน CREATE TABLE
ENGINE=InnoDB: รองรับเช่นกัน (MySQL 5.0+)
- ค่า AUTO_INCREMENT ต้อง > ค่าสูงสุดที่มีอยู่ (ถ้ามีข้อมูล)
เปลี่ยน AUTO_INCREMENT ภายหลัง
ALTER TABLE DemoTable1907 AUTO_INCREMENT = 1000;
ดูค่า AUTO_INCREMENT ปัจจุบัน
SHOW TABLE STATUS LIKE 'DemoTable1907';
-- หรือ
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'DemoTable1907';
ข้อควรระวัง
- AUTO_INCREMENT Column ต้องเป็น Key (Primary หรือ Unique)
- InnoDB: ไม่รองรับ AUTO_INCREMENT = 0 (Reset ผ่าน TRUNCATE)
- Replication: ใช้
auto_increment_increment และ auto_increment_offset สำหรับ Multi-Master
- Gap: Rollback/Delete ไม่ย้อนค่า Auto Increment กลับ
Use Cases
- Migration: เริ่ม ID ใหม่ไม่ชนกับระบบเก่า
- Sharding: Node 1 เริ่ม 1, Node 2 เริ่ม 1000000
- Business Requirement: Invoice Number เริ่มจาก 10000
- Testing: เริ่มจากค่าสูงเพื่อทดสอบ Boundary