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

วิธีข้ามคอลัมน์ AUTO_INCREMENT เมื่อ INSERT ข้อมูลใน MySQL

การข้ามคอลัมน์ 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;