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

Auto Increment ใน MySQL เริ่มจาก 1 แล้วจะเริ่มจากตัวเลขอื่นได้อย่างไร

การเปลี่ยนค่าเริ่มต้นของ AUTO_INCREMENT ใน MySQL

คอลัมน์ AUTO_INCREMENT เริ่มจาก 1 โดยค่าเริ่มต้น สามารถเปลี่ยนค่าเริ่มต้นได้ 2 วิธี:

  1. ระบุตอนสร้างตาราง: CREATE TABLE ... AUTO_INCREMENT = 1000
  2. เปลี่ยนภายหลัง: 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 แนะนำ)