349 votes

Insertion de plusieurs lignes dans mysql

La requête de la base de données est-elle plus rapide si j'insère plusieurs lignes à la fois ?

comme

INSERT....

UNION

INSERT....

UNION

(J'ai besoin d'insérer 2-3000 lignes)

8 votes

UNION est pour les sélections.

1 votes

Comment se présentent les rangs ? Ecrivez-vous directement du SQL sur le MySQL Query Browser ou l'utilisez-vous depuis PHP, C# ou autre ? Si vous êtes dans le dernier cas, consultez les liens suivants : Le moyen le plus rapide d'insérer 100 000 enregistrements Insertions rapides avec plusieurs rangées

1280voto

Nicola Cossu Points 18168

INSERT les déclarations qui utilisent VALUES La syntaxe permet d'insérer plusieurs lignes. Pour ce faire, incluez plusieurs listes de valeurs de colonnes, chacune entre parenthèses et séparée par une virgule.

Exemple :

INSERT INTO tbl_name
    (a,b,c)
VALUES
    (1,2,3),
    (4,5,6),
    (7,8,9);

Source :

0 votes

@RPK. Je suis d'accord avec vous mais je ne connais pas sa source de données. Comme je l'ai déjà écrit, si elle a un fichier, j'utiliserais la syntaxe load data comme le suggère cularis :)

0 votes

Il est également possible d'utiliser INSERT INTO Table SELECT 1, '14/05/2012', 3 UNION SELECT 2, '05/14/2012', 3 . bien sûr, cela ne sera meilleur que si les valeurs insérées proviennent de tables différentes.

81 votes

Référence utile, car il m'arrive d'oublier des syntaxes simples.

63voto

Jacob Points 17521

Si vous avez vos données dans un fichier texte, vous pouvez utiliser CHARGER LES DONNÉES DANS LE FICHIER .

Pour charger un tableau à partir d'un fichier texte, utilisez LOAD DATA INFILE. Cette méthode est généralement 20 fois plus rapide que l'utilisation des instructions INSERT.

Optimisation des instructions INSERT

Vous trouverez d'autres conseils sur la façon d'accélérer vos déclarations d'insertion sur le lien ci-dessus.

3 votes

Qu'en est-il des enregistrements dupliqués ?

2 votes

@Matteo Les doublons seront soit insérés soit rejetés par la base de données en fonction du schéma que vous avez défini.

0 votes

Utiliser les multi-requêtes mysql

34voto

sunilsingh Points 377

Il suffit d'utiliser un SELECT pour obtenir les valeurs de plusieurs lignes des colonnes choisies et mettre ces valeurs dans les colonnes d'un autre tableau en une seule fois. Par exemple, les colonnes "taille" et "prix" des deux tables "test_b" et "test_c" sont remplies avec les colonnes "taille" et "prix" de la table "test_a".

BEGIN;
INSERT INTO test_b (size, price)
  SELECT size, price
  FROM   test_a;
INSERT INTO test_c (size, price) 
  SELECT size, price
  FROM   test_a;
COMMIT;

Le code est intégré dans BEGIN y COMMIT de ne l'exécuter que lorsque les deux déclarations ont fonctionné, sinon toute l'exécution jusqu'à ce point est retirée.

2voto

RKh Points 2962

Comment se présentent les rangs ? Ecrivez-vous directement le SQL sur le MySQL Query Browser ou l'utilisez-vous depuis PHP, C# ou autre ?

Si vous êtes dans ce dernier cas, consultez les liens suivants :

Le moyen le plus rapide d'insérer 100 000 enregistrements

Insertions rapides avec plusieurs rangées

-1voto

Meloman Points 1546

Voici une solution PHP prête à être utilisée avec une table n:m (relation plusieurs à plusieurs) :

// get data
$table_1 = get_table_1_rows();
$table_2_fk_id = 123;

// prepare first part of the query (before values)
$query = "INSERT INTO `table` (
   `table_1_fk_id`,
   `table_2_fk_id`,
   `insert_date`
) VALUES ";

//loop the table 1 to get all foreign keys and put it in array
foreach($table_1 as $row) {
    $query_values[] = "(".$row["table_1_pk_id"].", $table_2_fk_id, NOW())";
}

// Implode the query values array with a coma and execute the query.
$db->query($query . implode(',',$query_values));

Prograide.com

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.

Powered by:

X