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 NULLtrê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 UPDATEvà muốn kiểm soát ID.