Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Có cần chèn giá trị cho cột AUTO_INCREMENT trong INSERT MySQL không?

Cột AUTO_INCREMENT: Không cần (và không nên) chỉ định giá trị khi INSERT

Khi cột được định nghĩa AUTO_INCREMENT, MySQL tự động gán giá trị 1, 2, 3... cho các hàng mới. Chỉ định giá trị thủ công là không cần thiết và có thể gây xung đột.

1. Tạo bảng với AUTO_INCREMENT

mysql> CREATE TABLE DemoTable (
    EmployeeId INT NOT NULL AUTO_INCREMENT,
    EmployeeName VARCHAR(30),
    EmployeeSalary INT,
    PRIMARY KEY (EmployeeId)
);

2. Chèn dữ liệu CHỈ cho cột không phải AUTO_INCREMENT

mysql> INSERT INTO DemoTable (EmployeeName, EmployeeSalary) VALUES
    ('Chris', 56789), ('David', 78909), ('Mike', 100056), ('Bob', 150000);

3. Xem kết quả - EmployeeId tự động gán 1,2,3,4

mysql> SELECT * FROM DemoTable;
+------------+--------------+----------------+
| EmployeeId | EmployeeName | EmployeeSalary |
+------------+--------------+----------------+
| 1          | Chris        | 56789          |
| 2          | David        | 78909          |
| 3          | Mike         | 100056         |
| 4          | Bob          | 150000         |
+------------+--------------+----------------+

Quy tắc quan trọng:

  • KHÔNG liệt kê cột AUTO_INCREMENT trong danh sách cột INSERT
  • KHÔNG truyền giá trị cho cột AUTO_INCREMENT (trừ khi cần giá trị cụ thể)
  • MySQL tự động quản lý counter nội bộ
  • Giá trị cuối cùng: LAST_INSERT_ID() (session-scoped)

Khi nào CẦN chỉ định giá trị AUTO_INCREMENT:

  • Migration dữ liệu (giữ ID cũ)
  • Replication / Sync giữa server
  • Test case cụ thể

Khi đó: INSERT INTO DemoTable (EmployeeId, EmployeeName, ...) VALUES (100, 'John', ...) - MySQL cho phép nhưng cập nhật counter nội bộ.

Lấy ID vừa chèn:

INSERT INTO DemoTable (EmployeeName, EmployeeSalary) VALUES ('New', 50000);
SELECT LAST_INSERT_ID();  -- Trả về EmployeeId của hàng vừa chèn

Lưu ý: LAST_INSERT_ID() an toàn cho multi-user (mỗi connection riêng biệt).