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

Truyền NULL cho cột AUTO_INCREMENT khi INSERT trong MySQL

Có, hoàn toàn hợp lệ. Khi cột được định nghĩa AUTO_INCREMENT (thường là PRIMARY KEY), bạn có thể truyền NULL (hoặc 0, hoặc bỏ cột khỏi danh sách) – MySQL sẽ tự động gán giá trị tiếp theo.

Cú pháp

INSERT INTO ten_bang VALUES (NULL, gia_tri_cot_2, gia_tri_cot_3, ...);

Hoặc tốt hơn: **không liệt kê cột AUTO_INCREMENT**:

INSERT INTO ten_bang (cot_2, cot_3, ...) VALUES (gia_tri_2, gia_tri_3, ...);

Ví dụ minh họa

Tạo bảng Client với AUTO_INCREMENT:

mysql> CREATE TABLE DemoTable1503 (
    -> ClientId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> ClientName VARCHAR(20),
    -> ClientAge INT
    -> );

Chèn với NULL cho ClientId:

mysql> INSERT INTO DemoTable1503 VALUES (NULL, 'Chris', 25);
mysql> INSERT INTO DemoTable1503 VALUES (NULL, 'David', 28);
mysql> INSERT INTO DemoTable1503 VALUES (NULL, 'Bob', 45);
mysql> INSERT INTO DemoTable1503 VALUES (NULL, 'Mike', 57);

Kết quả – ClientId tự gán 1,2,3,4:

+----------+------------+-----------+
| ClientId | ClientName | ClientAge |
+----------+------------+-----------+
|        1 | Chris      |        25 |
|        2 | David      |        28 |
|        3 | Bob        |        45 |
|        4 | Mike       |        57 |
+----------+-----------+

Giải thích

  • NOT NULL trên cột AUTO_INCREMENT **không cản trở** việc truyền NULL khi INSERT – MySQL hiểu đây là yêu cầu "tự gán".
  • Giá trị thực tế không bao giờ là NULL trong bảng (do NOT NULL + auto assign).
  • Cách này tương thích với chuẩn SQL và nhiều ORM (Hibernate, Entity Framework, v.v.).

Khi nào KHÔNG dùng NULL?

  • Khi bạn **muốn chỉ định ID thủ công** (ví dụ: nhập dữ liệu cũ, migration).
  • Khi dùng INSERT ... ON DUPLICATE KEY UPDATE và muốn kiểm soát ID.