การข้ามคอลัมน์ AUTO_INCREMENT ในคำสั่ง INSERT
เมื่อคอลัมน์แรกเป็น AUTO_INCREMENT PRIMARY KEY สามารถข้ามคอลัมน์นั้นไปได้โดยระบุค่าเป็น NULL หรือไม่ระบุคอลัมน์นั้นในรายการคอลัมน์
วิธีที่ 1: ระบุค่าเป็น NULL
INSERT INTO table_name VALUES (NULL, 'value2', 'value3', ...);
วิธีที่ 2: ระบุเฉพาะคอลัมน์ที่ต้องการ (แนะนำ)
INSERT INTO table_name (col2, col3, ...) VALUES ('value2', 'value3', ...);
ตัวอย่าง: ข้าม StudentId ที่เป็น AUTO_INCREMENT
1. สร้างตาราง
CREATE TABLE DemoTable (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentFirstName VARCHAR(100),
StudentAge INT
);
2. เพิ่มข้อมูลโดยข้าม StudentId (ใช้ NULL)
INSERT INTO DemoTable VALUES (NULL, 'Robert', 21);
INSERT INTO DemoTable VALUES (NULL, 'Sam', 22);
INSERT INTO DemoTable VALUES (NULL, 'Bob', 24);
INSERT INTO DemoTable VALUES (NULL, 'Carol', 20);
3. ดูข้อมูล - StudentId ถูกสร้างอัตโนมัติ
SELECT * FROM DemoTable;
ผลลัพธ์:
+-----------+------------------+------------+
| StudentId | StudentFirstName | StudentAge |
+-----------+------------------+------------+
| 1 | Robert | 21 |
| 2 | Sam | 22 |
| 3 | Bob | 24 |
| 4 | Carol | 20 |
+-----------+------------------+------------+
เหตุผลที่ทำงานได้
- MySQL กำหนดให้: การ INSERT ค่า
NULLลงในคอลัมน์AUTO_INCREMENTจะทำให้ระบบสร้างค่าใหม่อัตโนมัติ - นี่เป็นพฤติกรรมมาตรฐานของ MySQL
Best Practice: ระบุชื่อคอลัมน์ชัดเจน
INSERT INTO DemoTable (StudentFirstName, StudentAge)
VALUES ('Robert', 21), ('Sam', 22), ('Bob', 24), ('Carol', 20);
ข้อดี:
- โค้ดอ่านง่าย เข้าใจง่าย
- ไม่ขึ้นกับลำดับคอลัมน์ในตาราง
- ปลอดภัยเมื่อมีการ ALTER TABLE เพิ่ม/ลบคอลัมน์
- ไม่ต้องนับ NULL ให้ตรงจำนวนคอลัมน์
กรณีคอลัมน์ AUTO_INCREMENT ไม่อยู่ลำดับแรก
CREATE TABLE DemoTable (
Name VARCHAR(50),
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Age INT
);
-- ต้องระบุชื่อคอลัมน์ เพราะลำดับไม่ตรง
INSERT INTO DemoTable (Name, Age) VALUES ('John', 25);
การตั้งค่า AUTO_INCREMENT เริ่มต้น
CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(50)
) AUTO_INCREMENT = 1000; -- เริ่มจาก 1000
-- หรือเปลี่ยนภายหลัง
ALTER TABLE DemoTable AUTO_INCREMENT = 1000;