Quelle est la principale différence entre INSERT INTO table VALUES ..
et INSERT INTO table SET
?
Exemple :
INSERT INTO table (a, b, c) VALUES (1,2,3)
INSERT INTO table SET a=1, b=2, c=3
Et qu'en est-il des performances de ces deux-là ?
Quelle est la principale différence entre INSERT INTO table VALUES ..
et INSERT INTO table SET
?
Exemple :
INSERT INTO table (a, b, c) VALUES (1,2,3)
INSERT INTO table SET a=1, b=2, c=3
Et qu'en est-il des performances de ces deux-là ?
Pour autant que je sache, les deux syntaxes sont équivalentes. La première est la norme SQL, la seconde est l'extension de MySQL.
Ils devraient donc être exactement équivalents en termes de performances.
http://dev.mysql.com/doc/refman/5.6/en/insert.html dit :
INSERT insère de nouvelles lignes dans une table existante. Les formes INSERT ... VALUES et INSERT ... SET de l'instruction insèrent des lignes en fonction de valeurs explicitement spécifiées. Le formulaire INSERT ... SELECT insère des lignes sélectionnées dans une ou plusieurs autres tables.
Comment INSERER plusieurs valeurs en utilisant INSERT INTO table SET
? Est-ce même possible ?
Qu'est-ce que vous voulez dire ? L'exemple de l'OP dit SET a=1, b=2, c=3 ce qui est des valeurs multiples dans ma compréhension.
Je voulais dire, INSERER plusieurs lignes. Par exemple : INSERT INTO table (a, b, c) VALUES (1,2,3), (4,5,6), (7,8,9) ;
@Pacerier Tel que ? Le seul problème que je vois est celui de la portabilité (qui, dans de nombreux contextes, n'a pas vraiment d'importance) ; est-ce que je rate quelque chose ?
@MarkAmery, oui, quand on y regarde de plus près, il n'y a pas vraiment d'avantage. L'inconvénient est une perte de temps inutile l'existence même de ce fil de discussion prouve mon point de vue.
@Pacerier Je ne suis pas sûr de comprendre votre point de vue ? Quel temps perdu ? Il y a un avantage, qui a déjà été souligné : vous n'avez besoin de boucler sur un tableau de paires clé/valeur qu'une seule fois pour créer votre instruction INSERT, au lieu de deux fois comme vous auriez dû le faire en utilisant la syntaxe VALUES, ce qui conduit à un code plus court, plus clair et plus rapide à écrire.
Puisque les syntaxes sont équivalentes (dans MySQL en tout cas), je préfère la méthode INSERT INTO table SET x=1, y=2
car elle est plus facile à modifier et plus facile à détecter les erreurs dans l'instruction, notamment lors de l'insertion de nombreuses colonnes. Si vous devez insérer 10 ou 15 colonnes ou plus, il est très facile de se tromper en utilisant la syntaxe (x, y) VALUES (1,2)
syntaxe, à mon avis.
Si la portabilité entre différents standards SQL est un problème, alors peut-être que INSERT INTO table (x, y) VALUES (1,2)
serait préférable.
Et si vous voulez insérer plusieurs enregistrements dans une seule requête, il ne semble pas que la INSERT INTO ... SET
syntaxe ne fonctionnera pas, alors que l'autre le fera. Mais dans la plupart des cas pratiques, vous bouclez à travers un ensemble d'enregistrements pour faire des insertions de toute façon, bien qu'il puisse y avoir des cas où peut-être la construction d'une grande requête pour insérer un tas de lignes dans une table en une seule requête, par rapport à une requête pour chaque ligne, pourrait avoir une amélioration des performances. Je ne sais vraiment pas.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
13 votes
Après avoir lu Code Complete et l'insistance constante de McConnell sur la lisibilité, il semble malheureux que
INSERT INTO table SET
n'est pas standard. Cela semble beaucoup plus clair. Je suppose que je vais devoir utiliser leINSERT INTO table ([column name, column name b]) VALUES (['value a', 'value b'])
syntaxe de toute façon pour m'éviter des ennuis si je fais un portage vers Postgres.