Node.jsでMySQLにアクセスする

mysql - https://www.npmjs.com/package/mysql、または mysql2 - https://www.npmjs.com/package/mysql2を使うことでNode.jsからMySQLを操作できます。
本記事では非同期処理を簡単に扱えるmysql2を使ったサンプルになります。

インストール

mysql2

npm install mysql2

使用時

const mysql = require('mysql2');

参考:mysql

npm install mysql

使用時

const mysql = require('mysql');

mysql2 の使い方

poolPromiseとして扱うために、utilを利用します。

接続情報

色々ありますが、最低限下記があればOK。

  • host - 接続するデータベースのホスト名
  • user - 認証するMySQLユーザー
  • password - 上記MySQLユーザーのパスワード
  • database - 接続するデータベース

参照するデータベースの内容

テーブル:users
id name
U0001 user 001
U0002 user 002

サンプル

"use strict";
const mysql = require('mysql2');
// pool を Promise にするために必要.
const util = require('util');

/* 接続情報. */
const mySqlPoolOptions = {
    host: 'localhost',
    user: 'node-user',
    password: '00000000',
    database: 'node_sample_db',
};

async function insertUserAsync(id, name) {
  const pool = mysql.createPool(mySqlPoolOptions);
  pool.query = util.promisify(pool.query);
  try {
    const res = await pool.query('INSERT INTO users (id, name) VALUES (?, ?)', [id, name]);
    return res.affectedRows == 1;
  } catch (err) {
    console.log(err);
    return false;
  } finally {
    pool.end();
  }
}

async function selectUsersAsync() {
  const pool = mysql.createPool(mySqlPoolOptions);
  pool.query = util.promisify(pool.query);
  try {
    const rows = await pool.query('SELECT * FROM users');
    for (let row of rows) {
      console.log(${row.id} : ${row.name});
    }
  } catch (err) {
    console.log(err);
  } finally {
    pool.end();
  }
}

insertUserAsync('U0003', 'user 003').then(result => {
  console.log(result);
  return selectUsersAsync();
}).then(() => {
  console.log("finish");
});

実行結果

true
U0001 : user 001
U0002 : user 002
U0003 : user 003
finish
上記サンプルにおけるrowのプロパティやクエリーでVIEWを扱う場合、ビュー名やカラム名の大文字・小文字は厳密に区別されるので注意してください。

変更行数について

  • DELETEの行数は戻り値(res)のプロパティaffectedRowsに格納される
  • INSERTの行数は戻り値(res)のプロパティaffectedRowsに格納される
  • UPDATEの行数は戻り値(res)のプロパティaffectedRowsを参照する
    UPDATE時の内容に前回との差分が無い場合、プロパティのchangedRowsは値が0になるため

INSERT時のオートID

戻り値(res)のプロパティinsertIdに格納されます。

このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

コメント

メールアドレスが公開されることはありません。 が付いている欄は必須項目です