web-dev-qa-db-fra.com

Insérer plusieurs lignes dans mysql

La requête de 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 comme 2-3000 lignes)

350
Emma

Les instructions INSERT qui utilisent la syntaxe VALUES peuvent insérer plusieurs lignes. Pour ce faire, incluez plusieurs listes de valeurs de colonne, chacune entre parenthèses et séparée par des virgules.

Exemple:

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

Source

1112
Nicola Cossu

Si vous avez vos données dans un fichier texte, vous pouvez utiliser LOAD DATA INFILE .

Lorsque vous chargez une table à partir d'un fichier texte, utilisez LOAD DATA INFILE. Cela est généralement 20 fois plus rapide que d'utiliser des instructions INSERT.

Optimisation des instructions INSERT

Vous pouvez trouver plus de conseils pour accélérer vos déclarations d'insertion en cliquant sur le lien ci-dessus.

55
Jacob
BEGIN;
INSERT INTO test_b (price_sum)
  SELECT price
  FROM   test_a;
INSERT INTO test_c (price_summ) 
  SELECT price
FROM   test_a;
COMMIT;
23
sunilsingh

Voici une solution PHP prête à l'emploi 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));
0
Meloman