Một trong những thông báo lỗi phổ biến hơn trong MySQL như sau:“ ERROR 1136 (21S01):Số cột không khớp với số giá trị ở hàng 1 “.
Lỗi này thường xảy ra khi bạn đang cố gắng chèn dữ liệu vào bảng, nhưng số cột bạn đang cố chèn không khớp với số cột trong bảng.
Nói cách khác, bạn đang cố chèn quá nhiều cột hoặc không đủ cột.
Để khắc phục sự cố này, hãy đảm bảo rằng bạn đang chèn đúng số cột vào bảng.
Ngoài ra, bạn có thể đặt tên cho các cột trong INSERT
của mình để MySQL biết dữ liệu của bạn cần được chèn vào những cột nào.
Lỗi cũng có thể xảy ra nếu bạn chuyển sai số cột cho ROW()
khi sử dụng VALUES
tuyên bố.
Ví dụ về Lỗi
Giả sử chúng ta có bảng sau:
+----------+----------+----------+ | column_0 | column_1 | column_2 | +----------+----------+----------+ | 1 | 2 | 3 | | 4 | 5 | 6 | +----------+----------+----------+
Đoạn mã sau sẽ gây ra lỗi:
INSERT INTO t1 VALUES (7, 8, 9, 10);
Kết quả:
ERROR 1136 (21S01): Column count doesn't match value count at row 1
Trong trường hợp này, tôi đã cố gắng chèn dữ liệu cho bốn cột vào một bảng chỉ có ba cột.
Chúng tôi sẽ gặp lỗi tương tự nếu chúng tôi cố gắng chèn quá ít cột:
INSERT INTO t1 VALUES (7, 8);
Kết quả:
ERROR 1136 (21S01): Column count doesn't match value count at row 1
Giải pháp 1
Giải pháp rõ ràng là chèn đúng số hàng. Do đó, chúng tôi có thể viết lại mã của mình như sau:
INSERT INTO t1 VALUES (7, 8, 9);
Kết quả:
Query OK, 1 row affected (0.00 sec)
Giải pháp 2
Một cách khác để làm điều đó là đặt tên rõ ràng cho các cột mà chúng ta muốn chèn dữ liệu. Kỹ thuật này có thể được sử dụng để chèn ít cột hơn trong bảng.
Ví dụ:
INSERT INTO t1 (column_0, column_1) VALUES (7, 8);
Kết quả:
Query OK, 1 row affected (0.00 sec)
Phương thức này có thể dẫn đến một lỗi khác nếu có bất kỳ ràng buộc nào yêu cầu giá trị được chuyển cho cột đó (ví dụ:nếu bảng có NOT NULL
ràng buộc vào cột đó). Do đó, bạn cần đảm bảo rằng mình đang tuân thủ mọi ràng buộc đối với cột khi thực hiện việc này.