MySQL Inserimento di più righe


Esempio

INSERT INTO `my_table` (`field_1`, `field_2`) VALUES 
    ('data_1', 'data_2'),
    ('data_1', 'data_3'),
    ('data_4', 'data_5'); 

Questo è un modo semplice per aggiungere più righe contemporaneamente con una sola istruzione INSERT .

Questo tipo di inserto "batch" è molto più veloce dell'inserimento di righe una per una. In genere, l'inserimento di 100 righe in un singolo batch in questo modo è 10 volte più veloce di inserirle tutte singolarmente.

Ignorando le righe esistenti

Quando si importano insiemi di dati di grandi dimensioni, in determinate circostanze potrebbe essere preferibile saltare le righe che di solito causano il fallimento della query a causa di un vincolo di colonna, ad esempio chiavi primarie duplicate. Questo può essere fatto usando INSERT IGNORE .

Considera il seguente database di esempio:

SELECT * FROM `people`;
--- Produces:
+----+------+
| id | name |
+----+------+
|  1 | john |
|  2 | anna |
+----+------+


INSERT IGNORE INTO `people` (`id`, `name`) VALUES
    ('2', 'anna'), --- Without the IGNORE keyword, this record would produce an error
    ('3', 'mike');

SELECT * FROM `people`;
--- Produces:
+----+--------+
| id |  name  |
+----+--------+
|  1 |  john  |
|  2 |  anna  |
|  3 |  mike  |
+----+--------+

La cosa importante da ricordare è che INSERTO IGNORE salterà anche silenziosamente altri errori, ecco cosa dice la documentazione ufficiale di Mysql:

Le conversioni di dati che potrebbero causare errori interrompono l'istruzione se IGNORE non è> specificato. Con IGNORE, i valori non validi vengono adattati ai valori più vicini e> inseriti; gli avvertimenti sono prodotti ma la dichiarazione non abortisce.

Nota: - La sezione seguente viene aggiunta per completezza, ma non è considerata la migliore pratica (questo fallirebbe, ad esempio, se un'altra colonna fosse stata aggiunta alla tabella).

Se si specifica il valore della colonna corrispondente per tutte le colonne nella tabella, è possibile ignorare l'elenco delle colonne INSERT come segue:

INSERT INTO `my_table` VALUES 
        ('data_1', 'data_2'),
        ('data_1', 'data_3'),
        ('data_4', 'data_5');