Nguyên nhân
Số lượng giá trị trong VALUES() không khớp với số cột trong bảng (kể cả cột AUTO_INCREMENT).
Ví dụ lỗi
mysql> CREATE TABLE errorDemo (
User_Id INT NOT NULL AUTO_INCREMENT,
User_Name VARCHAR(20),
PRIMARY KEY(User_Id)
);
mysql> INSERT INTO errorDemo VALUES('John');
ERROR 1136 (21S01): Column count doesn't match value count at row 1
Giải pháp: Chỉ định tên cột
INSERT INTO bang (cot1, cot2, ...) VALUES (gia_tri1, gia_tri2, ...);
Sửa đúng
mysql> INSERT INTO errorDemo(User_Name) VALUES('John');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO errorDemo(User_Name) VALUES('Carol');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO errorDemo(User_Name) VALUES('Sam');
Query OK, 1 row affected (0.15 sec)
Kết quả
+---------+-----------+ | User_Id | User_Name | +---------+-----------+ | 1 | John | | 2 | Carol | | 3 | Sam | +---------+-----------+
Best Practices
- Luôn chỉ định tên cột trong INSERT (trừ khi INSERT tất cả cột theo đúng thứ tự)
- Cột AUTO_INCREMENT, DEFAULT, NULL: Bỏ qua trong danh sách cột
- Dùng
INSERT ... SELECTkhi copy từ bảng khác - Kiểm tra schema:
DESC bang;hoặcSHOW COLUMNS FROM bang;
Mẹo: Trong code ứng dụng, dùng ORM/query builder tự động sinh danh sách cột để tránh lỗi này.