ข้อผิดพลาดนี้เกิดเมื่อจำนวนคอลัมน์ไม่ตรงกับจำนวนค่าที่ระบุในคำสั่ง INSERT
ตัวอย่าง Error
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
สาเหตุ: ตารางมี 2 คอลัมน์ (User_Id, User_Name) แต่ส่งค่าแค่ 1 ค่า
วิธีแก้ไข: ระบุชื่อคอลัมน์ชัดเจน
INSERT INTO yourTableName(yourColumnName1, yourColumnName2, ...) VALUES(yourValue1, yourValue2, ...);
ตัวอย่างที่ถูกต้อง
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)
ตรวจสอบข้อมูล
mysql> SELECT * FROM errorDemo;
ผลลัพธ์:
+---------+-----------+ | User_Id | User_Name | +---------+-----------+ | 1 | John | | 2 | Carol | | 3 | Sam | +---------+-----------+
แนวทางป้องกัน
- ระบุชื่อคอลัมน์เสมอ:
INSERT INTO table (col1, col2) VALUES (val1, val2) - คอลัมน์ที่เป็น AUTO_INCREMENT หรือมี DEFAULT ไม่ต้องระบุในคำสั่ง INSERT
- นับจำนวนคอลัมน์และค่าให้ตรงกันก่อนรันคำสั่ง
- ใช้ IDE หรือ tool ที่แสดงโครงสร้างตารางขณะเขียน query
กรณี INSERT หลายแถวพร้อมกัน
INSERT INTO errorDemo(User_Name) VALUES
('John'), ('Carol'), ('Sam'), ('David');