web-dev-qa-db-ja.com

Mysqlに複数の行を挿入する

一度に複数の行を挿入すると、データベースのクエリは速くなりますか。

好き

INSERT....

UNION

INSERT....

UNION

(私は2-3000行のように挿入する必要があります)

350
Emma

INSERT構文を使用するVALUESステートメントは、複数行を挿入できます。これを行うには、それぞれが括弧で囲まれ、コンマで区切られた複数の列値のリストを含めます。

例:

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

出典

1053
Nicola Cossu

テキストファイルにデータがある場合は、 LOAD DATA INFILE を使用できます。

テキストファイルからテーブルをロードするときは、LOAD DATA INFILEを使用してください。これは通常INSERTステートメントを使用するよりも20倍高速です。

INSERTステートメントの最適化

あなたは上のリンクであなたの挿入ステートメントをスピードアップする方法に関するより多くのヒントを見つけることができます。

51
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;
18
sunilsingh

これは、n:m(多対多の関係)テーブルで使用できるPHPソリューションです。

// 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