web-dev-qa-db-fra.com

Le nombre de colonnes ne correspond pas au nombre de valeurs à la ligne 1

J'ai donc lu les autres posts mais cette question est unique. Donc, ce fichier de vidage SQL a ceci comme dernière entrée.

INSERT INTO `wp_posts` VALUES(2781, 3, '2013-01-04 17:24:19', '2013-01-05 00:24:19'.

J'essaie d'insérer cette valeur dans la table ...

INSERT INTO `wp_posts` VALUES(5, 5, '2005-04-11 09:54:35', '2005-04-11 17:54:35'

cela me donne l'erreur suivante: "Le nombre de colonnes ne correspond pas au nombre de valeurs à la ligne 1." Donc, je suis perdu sur le concept de la façon dont la colonne et la ligne s'appliquent ici.

Ne pas 2781,3 moyenne rangée 2781 et colonne 3? Et pas 5,5 signifie moyenne rangée 5 et colonne 5?

41
user2705462

L'erreur signifie que vous ne fournissez pas autant de données que la table wp_posts contient des colonnes. Et maintenant, le moteur de base de données ne sait pas dans quelles colonnes mettre vos données.

Pour résoudre ce problème, vous devez fournir les noms des colonnes que vous souhaitez remplir. Exemple:

insert into wp_posts (column_name1, column_name2)
values (1, 3)

Recherchez la définition de la table et voyez quelles colonnes vous souhaitez remplir.

Et insert signifie que vous êtes insérer un nouvel enregistrement. Vous ne modifiez pas un existant. Utilisez update pour cela.

48
juergen d
  1. vous avez manqué la virgule entre deux valeurs ou le nom de la colonne
  2. vous mettez des valeurs supplémentaires ou un nom de colonne supplémentaire
16
V Kash Singh

Vous devriez également regarder de nouveaux déclencheurs.

MySQL n'affiche pas le nom de la table dans l'erreur, vous êtes donc vraiment dans l'embarras. Voici un exemple de travail:

use test;
create table blah (id int primary key AUTO_INCREMENT, data varchar(100));
create table audit_blah (audit_id int primary key AUTO_INCREMENT, action enum('INSERT','UPDATE','DELETE'), id int, data varchar(100) null);
insert into audit_blah(action, id, data) values ('INSERT', 1, 'a');
select * from blah;
select * from audit_blah;
truncate table audit_blah;

delimiter //
/* I've commented out "id" below, so the insert fails with an ambiguous error: */
create trigger ai_blah after insert on blah for each row 
begin 
  insert into audit_blah (action, /*id,*/ data) values ('INSERT', /*NEW.id,*/ NEW.data);
end;//

/* This insert is valid, but you'll get an exception from the trigger: */
insert into blah (data) values ('data1');
10
inanutshellus

MySQL signalera également "Le nombre de colonnes ne correspond pas au nombre de valeurs à la ligne 1" si vous essayez d'insérer plusieurs lignes sans délimiter les ensembles de lignes dans la section VALUES avec des parenthèses, comme suit:

INSERT INTO `receiving_table`
  (id,
  first_name,
  last_name)
VALUES 
  (1002,'Charles','Babbage'),
  (1003,'George', 'Boole'),
  (1001,'Donald','Chamberlin'),
  (1004,'Alan','Turing'),
  (1005,'My','Widenius');
6
Sebastian

Vous pouvez résoudre l'erreur en fournissant les noms de colonne que vous affectez.

> INSERT INTO table_name (column1,column2,column3)
 `VALUES(50,'Jon Snow','Eye');`

s'il vous plaît noter que le point-virgule ne devrait être ajouté qu'après la déclaration fournissant des valeurs

2