Mysql ERROR 1136 (21S01): Numărul de coloane nu se potrivește cu numărul de valori din rândul 1 (Programare, Mysql)

Brandon a intrebat.

Am următorul tabel existent într-o bază de date mysql:

+---------------------+---------------+------+-----+---------+----------------+
| Field               | Type          | Null | Key | Default | Extra          |
+---------------------+---------------+------+-----+---------+----------------+
| f1                  | int(11)       | NO   | PRI | NULL    | auto_increment |
| field2              | int(11)       | NO   | MUL | NULL    |                |
| field3              | int(11)       | YES  |     | NULL    |                |
| field4              | int(11)       | YES  |     | NULL    |                |
| field6              | varchar(64)   | YES  |     | NULL    |                |
| field7              | varchar(16)   | YES  |     | NULL    |                |
| field8              | varchar(32)   | YES  |     | NULL    |                |
| field9              | varchar(128)  | YES  |     | NULL    |                |
| field10             | varchar(128)  | YES  |     | NULL    |                |
| field11             | varchar(128)  | YES  |     | NULL    |                |
| field12             | varchar(64)   | YES  |     | NULL    |                |
| field13             | varchar(32)   | YES  |     | NULL    |                |
| field14             | varchar(32)   | YES  |     | NULL    |                |
| field15             | int(11)       | YES  | MUL | NULL    |                |
| field16             | date          | YES  |     | NULL    |                |
| field17             | date          | YES  |     | NULL    |                |
| field18             | int(11)       | YES  | MUL | NULL    |                |
| field19             | varchar(64)   | YES  |     | NULL    |                |
| field20             | varchar(64)   | YES  |     | NULL    |                |
| field21             | varchar(16)   | YES  |     | NULL    |                |
| field22             | varchar(20)   | YES  |     | NULL    |                |
| field23             | varchar(1000) | YES  |     | NULL    |                |
| field24             | int(11)       | NO   | MUL | NULL    |                |
| field25             | int(11)       | NO   |     | 0       |                |
| field26             | decimal(19,2) | YES  |     | 0.00    |                |
| field27             | decimal(19,2) | YES  |     | 0.00    |                |
| field28             | int(11)       | YES  | MUL | NULL    |                |
| field29             | int(11)       | YES  | MUL | NULL    |                |
| field30             | varchar(128)  | YES  |     | NULL    |                |
| field31             | varchar(128)  | YES  |     | NULL    |                |
| field32             | varchar(16)   | YES  |     | NULL    |                |
| field33             | int(11)       | YES  |     | NULL    |                |
| field34             | int(11)       | YES  |     | NULL    |                |
| field35             | varchar(128)  | YES  |     | NULL    |                |
| field36             | int(11)       | YES  | MUL | NULL    |                |
| field37             | int(11)       | YES  |     | NULL    |                |
+---------------------+---------------+------+-----+---------+----------------+

Încerc următoarea instrucțiune pentru a adăuga un alt rând și primesc următoarea eroare:

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

Iată modalitățile prin care am încercat să introduc rândul în tabel:

insert into table (Field, Type, Null, Key, Default, Extra) VALUES ("contract_expiration", "date", "YES", "", "NULL", "");

insert into table VALUES ('contract_expiration','date','YES','','NULL','');

Ambele returnează aceeași eroare. Nu există triggere pe tabel, nu sunt sigur ce se întâmplă.

Aveți vreo sugestie? Sunt relativ nou în administrarea mysql, știu câte ceva, dar acest lucru m-a pus în încurcătură și căutările de soluții nu au dat nimic.

Orice ajutor care ar putea fi oferit ar fi MULT apreciat!

Comentarii

  • Vă dați seama că aspectul tabelului nu pare să aibă nicio legătură cu interogările pe care le-ați postat. Coloanele din insert nu sunt în listă. –  > Por Gordon Linoff.
3 răspunsuri
Gordon Linoff

NULL nu este un nume de câmp valid în:

insert into `table`(Field, Type, Null, Key, Default, Extra) 
    VALUES ("contract_expiration", "date", "YES", "", "NULL", "");

Și Key și default sunt cuvinte rezervate. Încercați acest lucru:

insert into `table`(Field, `Type`, `Null`, `Key`, `Default`, Extra) 
    VALUES ("contract_expiration", "date", "YES", "", "NULL", "");

Comentarii

  • +1 dar oricum, @user3311240 nu ar trebui să folosești cuvinte rezervate pentru numele câmpurilor –  > Por FabioG.
  • Mulțumesc. Am încercat asta și mi-a dat următorul rezultat: insert into table (Field, Type, Null, Key, Default, Extra) VALUES („expirare_contract”, „data”, „DA”, „”, „NULL”, „”); ERROR 1064 (42000): Aveți o eroare în sintaxa SQL; verificați manualul care corespunde versiunii serverului MySQL pentru a afla care este sintaxa corectă de utilizat în apropierea „table (Field, Type, Null, Key, Default, Extra) VALUES („contract_expirat” la linia 1 –  > Por Brandon.
  • Ștergeți asta. Am avut o eroare… Am rezolvat-o și acum primesc următoarele: EROARE 1054 (42S22): Coloană necunoscută ‘Field’ în ‘field list’ –  > Por Brandon.
  • @user3311240 . . . . I nu știu ce câmp vrei să introduci. Tu ar trebui să știi asta. Ce câmp vrei să pui contract_expiration în? –  > Por Gordon Linoff.
  • Încerc să introduc contractul_expirare în coloana numită Câmpul –  > Por Brandon.
AKASH GUDADHE
mysql> desc classroom;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| clId    | int(11)     | NO   | PRI | NULL    | auto_increment |
| clFName | varchar(30) | NO   |     | NULL    |                |
| clSName | varchar(10) | NO   |     | NULL    |                |
| clCapc  | int(3)      | NO   |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

mysql> select * from classroom;
+------+------------+---------+--------+
| clId | clFName    | clSName | clCapc |
+------+------------+---------+--------+
|    1 | Classroom1 | cl1     |    100 |
|    2 | 2          | 2       |      2 |
|    3 | 3f         | 3s      |      3 |
|    4 | 3f         | 3s      |      3 |
|    5 | class4     | class4  |    100 |
+------+------------+---------+--------+
5 rows in set (0.00 sec)

Și eu am aceeași eroare

mysql> insert into classroom values('Gudadhe', 'Akash', 20);
ERROR 1136 (21S01): Column count doesn't match value count at row 1

Această eroare poate fi rezolvată prin specificarea numelor coloanelor înainte de a le insera direct, după cum urmează

Prin scrierea classroom(clFName, clSName, clCapc) specificăm coloanele în care dorim să inserăm valori

mysql> insert into classroom(clFName, clSName, clCapc) values('Gudadhe', 'Akash', 20);
Query OK, 1 row affected (0.06 sec)

Sverre

Am avut un caz similar, în care am luat definiția tabelului de pe un server dev și datele de pe un server live și s-a dovedit că, de fapt, nu erau chiar la fel.

Modul în care am aflat diferența a fost următorul (probabil că există modalități mai inteligente de a face acest lucru, dar așa am procedat eu):

SHOW CREATE TABLE mytable;

Am rulat acest lucru pe toate cele 3 cazuri (baza de date live, baza de date dev și noua bază de date pe care am creat-o folosind CREATE TABLE xxx like xxx).

Apoi am comparat pur și simplu cele 3 și am constatat că live și dev aveau un set diferit de coloane, așa că am rulat pur și simplu

 ALTER TABLE xxx DROP yyy; 

până când noua tabelă a fost aceeași cu tabela din care a fost descărcată; apoi am putut importa datele.

Comentarii

  • mulțumesc pentru că mi-ați reparat limbajul / gramatica oribilă 🙂 –  > Por Sverre.

Tags: