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

เพิ่มคอลัมน์ Auto Increment เริ่มต้นที่กำหนดเองใน MySQL


สถานการณ์

มีตารางที่สร้างแล้ว (ไม่มี Auto Increment Column) ต้องการเพิ่มคอลัมน์ ID ใหม่ที่ Auto Increment เริ่มจากค่าที่กำหนด (เช่น 1000)

วิธีแก้: ใช้ ALTER TABLE ADD COLUMN + AUTO_INCREMENT

ตัวอย่างการใช้งาน

1. สร้างตารางเดิม (ไม่มี ID)

mysql> CREATE TABLE DemoTable (
    -> StudentName VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.63 sec)

2. เพิ่มข้อมูล

mysql> INSERT INTO DemoTable VALUES('Robert');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable VALUES('Adam');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable VALUES('Mike');
Query OK, 1 row affected (0.12 sec)

3. เพิ่มคอลัมน์ StudentId พร้อม Auto Increment เริ่มที่ 1000

mysql> ALTER TABLE DemoTable 
    -> ADD COLUMN StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> AUTO_INCREMENT = 1000;
Query OK, 0 rows affected (1.83 sec)
Records: 0 Duplicates: 0 Warnings: 0

4. ตรวจสอบผลลัพธ์

mysql> SELECT * FROM DemoTable;

ผลลัพธ์:

+-------------+-----------+
| StudentName | StudentId |
+-------------+-----------+
| Robert      | 1000      |
| Adam        | 1001      |
| Mike        | 1002      |
+-------------+-----------+
3 rows in set (0.00 sec)

รายละเอียดคำสั่ง

ALTER TABLE table_name
ADD COLUMN column_name INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
AUTO_INCREMENT = start_value;
  • ADD COLUMN - เพิ่มคอลัมน์ใหม่
  • INT NOT NULL - Integer ไม่รับ NULL
  • AUTO_INCREMENT - กำหนดให้ Auto Increment
  • PRIMARY KEY - ตั้งเป็น Primary Key (จำเป็นสำหรับ Auto Increment)
  • AUTO_INCREMENT = 1000 - กำหนดค่าเริ่มต้น

ข้อควรระวัง

  • ตารางต้องไม่มี Primary Key อยู่แล้ว (หรือต้อง Drop PK เก่าก่อน)
  • AUTO_INCREMENT ต้องเป็นส่วนของ Primary Key หรือ Unique Key
  • ค่าเริ่มต้นต้องมากกว่าค่าสูงสุดที่มีอยู่ (ถ้ามีข้อมูลเดิม)
  • การ ALTER TABLE บนตารางใหญ่ อาจ Lock ตารางนาน (ใช้ pt-online-schema-change หรือ ALGORITHM=INPLACE)

เปลี่ยนค่า Auto Increment ภายหลัง

ALTER TABLE DemoTable AUTO_INCREMENT = 2000;

กรณีการใช้งานจริง

  • Merge Database: ป้องกัน ID ชนกันระหว่าง Server
  • Legacy Migration: รักษา ID เดิม เริ่มใหม่จากช่วงว่าง
  • Multi-tenant: Tenant A เริ่ม 10000, Tenant B เริ่ม 20000
  • Test Data: เริ่มจากค่าสูงเพื่อแยกจาก Production Data

MySQL 8.0+ Feature: AUTO_INCREMENT Offset/Increment

-- สำหรับ Master-Master Replication
SET @@auto_increment_increment = 2;
SET @@auto_increment_offset = 1;   -- Server 1: 1, 3, 5, 7...
SET @@auto_increment_offset = 2;   -- Server 2: 2, 4, 6, 8...