Réponses:
Autant que je sache, les deux syntaxes sont équivalentes. Le premier est le standard SQL, le second 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 basées sur des valeurs explicitement spécifiées. Le formulaire INSERT ... SELECT insère des lignes sélectionnées dans une ou plusieurs autres tables.
INSERT INTO table SET
? Est-ce seulement possible?
Je pense que l'extension est destinée à permettre une syntaxe similaire pour les insertions et les mises à jour. Dans Oracle, une astuce syntaxique similaire est:
UPDATE table SET (col1, col2) = (SELECT val1, val2 FROM dual)
INSERT ... SET ...
et INSERT ... VALUES ...
. Pour la fonctionnalité, vous disposez d'un code plus court et plus rapide à écrire, d'une lisibilité accrue et de l'élimination des fautes de frappe causées par le mélange de l'ordre des colonnes lors de l'écriture de votre VALUES
clause. Mon instinct me dit que sur le net, le bien l'emporte sur le mal, mais votre jugement peut différer.
Étant donné que les syntaxes sont équivalentes (dans MySQL de toute façon), je préfère la INSERT INTO table SET x=1, y=2
syntaxe, car elle est plus facile à modifier et à détecter les erreurs dans l'instruction, en particulier lors de l'insertion de nombreuses colonnes. Si vous devez insérer 10 ou 15 colonnes ou plus, il est vraiment facile de mélanger quelque chose en utilisant la (x, y) VALUES (1,2)
syntaxe, à mon avis.
Si la portabilité entre différentes normes SQL est un problème, alors peut INSERT INTO table (x, y) VALUES (1,2)
-être serait préférable.
Et si vous souhaitez insérer plusieurs enregistrements dans une seule requête, il ne semble pas que la INSERT INTO ... SET
syntaxe fonctionnera, tandis que l'autre le fera. Mais dans la plupart des cas pratiques, vous parcourez un ensemble d'enregistrements pour effectuer 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 groupe de lignes dans une table dans une seule requête, par rapport à une requête pour chaque ligne, pourrait avoir une amélioration des performances. Je ne sais vraiment pas.
INSERT INTO table SET
ne soit pas standard. Cela semble beaucoup plus clair. Je suppose que je devraiINSERT INTO table ([column name, column name b]) VALUES (['value a', 'value b'])
quand même utiliser la syntaxe pour me sauver des ennuis si je porte sur Postgres.