NodeJS 速習チュートリアル

Node.js MySQL データ挿入

1. テーブルへのデータ挿入

MySQLのテーブルにデータを登録するには、INSERT INTO ステートメントを使用します。

1.1 実装例:「customers」テーブルへのレコード挿入

以下のコードは、customers テーブルに1件のレコードを挿入する例です。

let mysql = require('mysql');

// データベース接続設定
let con = mysql.createConnection({
  host: "localhost",
  user: "ユーザー名",
  password: "パスワード",
  database: "mydb"
});

con.connect(function(err) {
  if (err) throw err;
  console.log("接続完了!");
  
  // 挿入用のSQL文
  let sql = "INSERT INTO customers (name, address) VALUES ('Company Inc', 'Highway 37')";
  
  con.query(sql, function (err, result) {
    if (err) throw err;
    console.log("1件のレコードを挿入しました");
  });
});

上記の内容を demo_db_insert.js というファイル名で保存し、実行します。

demo_db_insert.js の実行

C:\Users\Your Name>node demo_db_insert.js

実行結果:

Connected!
1 record inserted

2. 複数レコードの挿入(バルクインサート)

複数のレコードを一度に挿入したい場合は、値を含む「配列の配列」を作成します。SQL文の中に ?(プレースホルダ)を記述すると、実行時にその部分が配列データに置き換えられます。

INSERT INTO customers (name, address) VALUES ?

2.1 実装例:一括データ投入

let mysql = require('mysql');

let con = mysql.createConnection({
  host: "localhost",
  user: "ユーザー名",
  password: "パスワード",
  database: "mydb"
});

con.connect(function(err) {
  if (err) throw err;
  console.log("接続完了!");
  
  let sql = "INSERT INTO customers (name, address) VALUES ?";
  
  // 挿入するデータの配列
  let values = [
    ['John', 'Highway 71'],
    ['Peter', 'Lowstreet 4'],
    ['Amy', 'Apple st 652'],
    ['Hannah', 'Mountain 21'],
    ['Michael', 'Valley 345'],
    ['Sandy', 'Ocean blvd 2'],
    ['Betty', 'Green Grass 1'],
    ['Richard', 'Sky st 331'],
    ['Susan', 'One way 98'],
    ['Vicky', 'Yellow Garden 2'],
    ['Ben', 'Park Lane 38'],
    ['William', 'Central st 954'],
    ['Chuck', 'Main Road 989'],
    ['Viola', 'Sideway 1633']
  ];
  
  // 第2引数に[values]を渡す
  con.query(sql, [values], function (err, result) {
    if (err) throw err;
    console.log("挿入されたレコード数: " + result.affectedRows);
  });
});

demo_db_insert_multiple.js の実行

C:\Users\Your Name>node demo_db_insert_multiple.js

実行結果:

Connected!
Number of records inserted: 14

3. 結果オブジェクト(Result Object)

クエリを実行すると、コールバック関数の第2引数に「結果オブジェクト」が返されます。
このオブジェクトには、クエリがテーブルにどのような影響を与えたかに関する情報が含まれています。

上記の複数レコード挿入の例で返されるオブジェクトの内容は以下の通りです。

{
  fieldCount: 0,
  affectedRows: 14,    // 影響を受けた行数
  insertId: 0,
  serverStatus: 2,
  warningCount: 0,
  message: "'Records:14  Duplicated: 0  Warnings: 0",
  protocol41: true,
  changedRows: 0
}

これらのプロパティの値は、以下のようにして表示・利用できます。

console.log(result.affectedRows); // 出力結果: 14

4. 挿入されたIDの取得(Insert ID)

テーブルに AUTO_INCREMENT 設定のIDフィールドがある場合、直前に挿入されたレコードのIDを結果オブジェクトから取得できます。

       注意: 挿入されたIDを取得するには、一度に 1行のみ を挿入する必要があります。

4.1 実装例:挿入したレコードのIDを表示する

let mysql = require('mysql');

let con = mysql.createConnection({
  host: "localhost",
  user: "ユーザー名",
  password: "パスワード",
  database: "mydb"
});

con.connect(function(err) {
  if (err) throw err;
  
  let sql = "INSERT INTO customers (name, address) VALUES ('Michelle', 'Blue Village 1')";
  
  con.query(sql, function (err, result) {
    if (err) throw err;
    // result.insertId で自動採番されたIDを取得
    console.log("1件のレコードを挿入しました。ID: " + result.insertId);
  });
});

demo_db_insert_id.js の実行

C:\Users\Your Name>node demo_db_insert_id.js

実行結果:

1 record inserted, ID: 15