sql >> Database teknologi >  >> RDS >> Mysql

Ret "FEJL 1136 (21S01):Kolonneantal stemmer ikke overens med værdiantallet i række 1", når du indsætter data i MySQL

En af de mere almindelige fejlmeddelelser i MySQL lyder sådan her:"FEJL 1136 (21S01):Kolonneantal matcher ikke værdiantal i række 1 “.

Denne fejl opstår typisk, når du forsøger at indsætte data i en tabel, men antallet af kolonner, du forsøger at indsætte, svarer ikke til antallet af kolonner i tabellen.

Med andre ord forsøger du enten at indsætte for mange kolonner eller ikke nok kolonner.

For at løse dette problem skal du sørge for at indsætte det korrekte antal kolonner i tabellen.

Alternativt kan du navngive kolonnerne i din INSERT sætning, så MySQL ved, hvilke kolonner dine data skal indsættes i.

Fejlen kan også opstå, hvis du sender det forkerte antal kolonner til en ROW() klausul, når du bruger VALUES erklæring.

Eksempel på fejl

Antag, at vi har følgende tabel:

+----------+----------+----------+
| column_0 | column_1 | column_2 |
+----------+----------+----------+
|        1 |        2 |        3 |
|        4 |        5 |        6 |
+----------+----------+----------+

Følgende kode vil forårsage fejlen:

INSERT INTO t1 VALUES (7, 8, 9, 10);

Resultat:

ERROR 1136 (21S01): Column count doesn't match value count at row 1

I dette tilfælde forsøgte jeg at indsætte data for fire kolonner i en tabel, der kun har tre kolonner.

Vi får den samme fejl, hvis vi forsøger at indsætte for få kolonner:

INSERT INTO t1 VALUES (7, 8);

Resultat:

ERROR 1136 (21S01): Column count doesn't match value count at row 1

Løsning 1

Den oplagte løsning er at indsætte det korrekte antal rækker. Derfor kunne vi omskrive vores kode som følger:

INSERT INTO t1 VALUES (7, 8, 9);

Resultat:

Query OK, 1 row affected (0.00 sec)

Løsning 2

En anden måde at gøre det på er at navngive de kolonner, som vi ønsker at indsætte data for. Denne teknik kan bruges til at indsætte færre kolonner end i tabellen.

Eksempel:

INSERT INTO t1 (column_0, column_1) VALUES (7, 8);

Resultat:

Query OK, 1 row affected (0.00 sec)

Denne metode kan resultere i en anden fejl, hvis der er nogen begrænsninger, der kræver, at en værdi sendes til den kolonne (f.eks. hvis tabellen har en NOT NULL begrænsning på den kolonne). Derfor skal du sikre dig, at du overholder eventuelle begrænsninger på kolonnen, når du gør dette.


  1. Er der en måde at gå gennem en tabelvariabel i TSQL uden at bruge en markør?

  2. NoSQL:liv uden et skema

  3. Hvordan ændres mysql til mysqli?

  4. Hvordan kan jeg ændre størrelsen på kolonnen i en MySQL-tabel?