Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

สร้างตารางพร้อม AUTO_INCREMENT เริ่มต้นกำหนดเองใน MySQL

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