Có, hoàn toàn được. Khi một cột được định nghĩa là AUTO_INCREMENT (thường là khóa chính), MySQL sẽ tự động gán giá trị tăng dần nếu bạn không đưa cột đó vào danh sách cột hoặc truyền giá trị NULL / 0 (tùy chế độ SQL).
Cách làm đúng chuẩn
Chỉ liệt kê các cột không phải AUTO_INCREMENT trong câu INSERT:
INSERT INTO ten_bang (cot_khong_auto) VALUES (gia_tri);
Ví dụ minh họa
Tạo bảng nhân viên với EmployeeId tự động tăng:
mysql> CREATE TABLE DemoTable1479 (
-> EmployeeId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> EmployeeSalary INT
-> );
Query OK, 0 rows affected (0.86 sec)
Chèn lương mà không đề cập EmployeeId:
mysql> INSERT INTO DemoTable1479(EmployeeSalary) VALUES(6800); Query OK, 1 row affected (0.10 sec) mysql> INSERT INTO DemoTable1479(EmployeeSalary) VALUES(5600); Query OK, 1 row affected (0.11 sec) mysql> INSERT INTO DemoTable1479(EmployeeSalary) VALUES(5700); Query OK, 1 row affected (0.16 sec) mysql> INSERT INTO DemoTable1479(EmployeeSalary) VALUES(6900); Query OK, 1 row affected (0.14 sec) mysql> INSERT INTO DemoTable1479(EmployeeSalary) VALUES(15000); Query OK, 1 row affected (0.11 sec)
Kết quả - MySQL tự gán ID 1,2,3,4,5:
+------------+----------------+ | EmployeeId | EmployeeSalary | +------------+----------------+ | 1 | 6800 | | 2 | 5600 | | 3 | 5700 | | 4 | 6900 | | 5 | 15000 | +------------+----------------+
Lưu ý thêm
- Nếu bạn muốn chỉ định ID thủ công, hãy đưa cột ID vào danh sách cột và truyền giá trị cụ thể (miễn là không trùng khóa chính).
- Tránh truyền
0cho cột AUTO_INCREMENT trừ khi bật chế độNO_AUTO_VALUE_ON_ZERO, vì MySQL có thể hiểu là "tự gán" chứ không phải "gán giá trị 0". - Cách này áp dụng cho mọi engine (InnoDB, MyISAM, v.v.).