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

ตั้งค่า Primary Key เริ่มจาก 1000 ใน MySQL ด้วย AUTO_INCREMENT

ค่าเริ่มต้นของ 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, ...