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 inserted2. 複数レコードの挿入(バルクインサート)
複数のレコードを一度に挿入したい場合は、値を含む「配列の配列」を作成します。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: 143. 結果オブジェクト(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); // 出力結果: 144. 挿入された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