Risposte:
Per quanto ne so, entrambe le sintassi sono equivalenti. Il primo è lo standard SQL, il secondo è l'estensione di MySQL.
Quindi dovrebbero essere esattamente equivalenti in termini di prestazioni.
http://dev.mysql.com/doc/refman/5.6/en/insert.html dice:
INSERT inserisce nuove righe in una tabella esistente. I moduli INSERT ... VALUES e INSERT ... SET dell'istruzione inseriscono le righe in base a valori esplicitamente specificati. Il modulo INSERT ... SELECT inserisce le righe selezionate da un'altra o più tabelle.
INSERT INTO table SET
? È possibile?
Penso che l'estensione abbia lo scopo di consentire una sintassi simile per inserimenti e aggiornamenti. In Oracle, un simile trucco sintattico è:
UPDATE table SET (col1, col2) = (SELECT val1, val2 FROM dual)
INSERT ... SET ...
e INSERT ... VALUES ...
. Per la funzionalità hai codice più breve e più veloce da scrivere, maggiore leggibilità ed eliminazione di errori di battitura causati dalla confusione dell'ordine delle colonne durante la scrittura della VALUES
clausola. Il mio istinto mi dice che in rete il bene supera il male, ma il tuo giudizio può essere diverso.
Poiché le sintassi sono equivalenti (comunque in MySQL), preferisco la INSERT INTO table SET x=1, y=2
sintassi, poiché è più facile da modificare e più facile rilevare errori nell'istruzione, specialmente quando si inseriscono molte colonne. Se devi inserire 10 o 15 o più colonne, è davvero facile confondere qualcosa usando la (x, y) VALUES (1,2)
sintassi, secondo me.
Se la portabilità tra diversi standard SQL è un problema, forse INSERT INTO table (x, y) VALUES (1,2)
sarebbe preferibile.
E se vuoi inserire più record in una singola query, non sembra che la INSERT INTO ... SET
sintassi funzionerà, mentre l'altra lo farà. Ma nella maggior parte dei casi pratici, stai eseguendo il ciclo di un set di record per eseguire comunque inserimenti, anche se potrebbero esserci alcuni casi in cui forse costruendo una query di grandi dimensioni per inserire un gruppo di righe in una tabella in una query, rispetto a una query per ogni riga, potrebbe avere un miglioramento delle prestazioni. Davvero non lo so.
INSERT INTO table SET
non sia standard. Sembra molto più chiaro. Immagino che dovròINSERT INTO table ([column name, column name b]) VALUES (['value a', 'value b'])
comunque usare la sintassi per salvarmi dai guai se porto su Postgres.