Node.js で MySQL に接続する

この章では、Node.js を使用して MySQL に接続し、データベースを操作する方法を紹介します。

MySQL の基本的な知識がない場合は、当サイトのチュートリアルを参照してください:MySQL チュートリアル。

本チュートリアルで使用する Websites テーブルの SQL ファイル:websites.sql。

ドライバーのインストール

本チュートリアルでは、淘宝(タオバオ)カスタマイズの cnpm コマンドを使用してインストールします:

$ cnpm install mysql

データベースへの接続

以下のインスタンスでは、実際の設定に合わせてデータベースのユーザー名、パスワード、データベース名を変更してください:

test.js ファイルのコード:

var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '123456', database : 'test' }); connection.connect(); connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) { if (error) throw error; console.log('The solution is: ', results[0].solution); });

以下のコマンドを実行すると、出力結果は次のようになります:

$ node test.js
The solution is: 2

データベース接続パラメータの説明:

パラメータ説明
hostホストアドレス(デフォルト:localhost)
  userユーザー名
  passwordパスワード
  portポート番号(デフォルト:3306)
  databaseデータベース名
  charset接続文字セット(デフォルト:'UTF8_GENERAL_CI'、文字セットのアルファベットはすべて大文字にする必要があります)
  localAddressこのIPはTCP接続に使用されます(オプション)
  socketPathUnixドメインパスに接続します。host と port を使用する場合は無視されます。
  timezoneタイムゾーン(デフォルト:'local')
  connectTimeout接続タイムアウト(デフォルト:制限なし。単位:ミリ秒)
  stringifyObjectsオブジェクトをシリアライズするかどうか
  typeCast列の値をローカルのJavaScript型の値に変換するかどうか(デフォルト:true)
  queryFormatカスタムクエリ文のフォーマット方法
  supportBigNumbersデータベースがbigintまたはdecimal型の列をサポートする場合、このオプションをtrueに設定する必要があります(デフォルト:false)
  bigNumberStringssupportBigNumbersとbigNumberStringsを有効にすると、bigintまたはdecimal列がJavaScriptの文字列型で返されます(デフォルト:false)
  dateStringstimestamp、datetime、date型をJavaScriptのDate型ではなく、文字列型で返します(デフォルト:false)
  debugデバッグを有効にする(デフォルト:false)
  multipleStatements1つのクエリ内で複数のMySQLステートメントを許可するかどうか(デフォルト:false)
  flags接続フラグを変更するために使用します
  sslsslパラメータ(crypto.createCredentialsパラメータと同じ形式)またはssl設定ファイル名を含む文字列を使用します。現在はAmazon RDSの設定ファイルのみがバンドルされています。

詳細は以下を参照してください:https://github.com/mysqljs/mysql


データベース操作(CRUD)

データベース操作を行う前に、当サイトが提供する Websites テーブルの SQL ファイルをwebsites.sqlMySQL データベースにインポートする必要があります。

本チュートリアルでテストするMySQLユーザー名は root、パスワードは 123456、データベースは test です。ご自身の設定に応じて変更してください。

データのクエリ

上記で提供した SQL ファイルをデータベースにインポートした後、以下のコードを実行するとデータをクエリできます:

データのクエリ

var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '123456', port: '3306', database: 'test' }); connection.connect(); var sql = 'SELECT * FROM websites'; //查 connection.query(sql,function (err, result) { if(err){ console.log('[SELECT ERROR] - ',err.message); return; } console.log('--------------------------SELECT----------------------------'); console.log(result); console.log('------------------------------------------------------------\n\n'); }); connection.end();

以下のコマンドを実行すると、出力結果は次のようになります:

$ node test.js
--------------------------SELECT----------------------------
[ RowDataPacket {
    id: 1,
    name: 'Google',
    url: 'https://www.google.cm/',
    alexa: 1,
    country: 'USA' },
  RowDataPacket {
    id: 2,
    name: '淘宝',
    url: 'https://www.taobao.com/',
    alexa: 13,
    country: 'CN' },
  RowDataPacket {
    id: 3,
    name: 'サンプル',
    url: 'http://www.example.com/',
    alexa: 4689,
    country: 'CN' },
  RowDataPacket {
    id: 4,
    name: '微博',
    url: 'http://weibo.com/',
    alexa: 20,
    country: 'CN' },
  RowDataPacket {
    id: 5,
    name: 'Facebook',
    url: 'https://www.facebook.com/',
    alexa: 3,
    country: 'USA' } ]
------------------------------------------------------------

データの挿入

データテーブル websites にデータを挿入できます:

データの挿入

var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '123456', port: '3306', database: 'test' }); connection.connect(); var addSql = 'INSERT INTO websites(Id,name,url,alexa,country) VALUES(0,?,?,?,?)'; var addSqlParams = ['サンプルツール', 'https://c.example.com','23453', 'CN']; //增 connection.query(addSql,addSqlParams,function (err, result) { if(err){ console.log('[INSERT ERROR] - ',err.message); return; } console.log('--------------------------INSERT----------------------------'); //console.log('INSERT ID:',result.insertId); console.log('INSERT ID:',result); console.log('-----------------------------------------------------------------\n\n'); }); connection.end();

以下のコマンドを実行すると、出力結果は次のようになります:

$ node test.js
--------------------------INSERT----------------------------
INSERT ID: OkPacket {
  fieldCount: 0,
  affectedRows: 1,
  insertId: 6,
  serverStatus: 2,
  warningCount: 0,
  message: '',
  protocol41: true,
  changedRows: 0 }
-----------------------------------------------------------------

実行が成功したら、データテーブルを確認すると、追加されたデータを確認できます:

データの更新

データベースのデータを修正することもできます:

データの更新

var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '123456', port: '3306', database: 'test' }); connection.connect(); var modSql = 'UPDATE websites SET name = ?,url = ? WHERE Id = ?'; var modSqlParams = ['サンプルモバイルサイト', 'https://m.example.com',6]; //改 connection.query(modSql,modSqlParams,function (err, result) { if(err){ console.log('[UPDATE ERROR] - ',err.message); return; } console.log('--------------------------UPDATE----------------------------'); console.log('UPDATE affectedRows',result.affectedRows); console.log('-----------------------------------------------------------------\n\n'); }); connection.end();

以下のコマンドを実行すると、出力結果は次のようになります:

--------------------------UPDATE----------------------------
UPDATE affectedRows 1
-----------------------------------------------------------------

実行が成功したら、データテーブルを確認すると、更新されたデータを確認できます:

データの削除

以下のコードを使用して、id が 6 のデータを削除できます:

データの削除

var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '123456', port: '3306', database: 'test' }); connection.connect(); var delSql = 'DELETE FROM websites where id=6'; //删 connection.query(delSql,function (err, result) { if(err){ console.log('[DELETE ERROR] - ',err.message); return; } console.log('--------------------------DELETE----------------------------'); console.log('DELETE affectedRows',result.affectedRows); console.log('-----------------------------------------------------------------\n\n'); }); connection.end();

以下のコマンドを実行すると、出力結果は次のようになります:

--------------------------DELETE----------------------------
DELETE affectedRows 1
-----------------------------------------------------------------

実行が成功したら、データテーブルを確認すると、id=6 のデータが削除されたことを確認できます:

その他の拡張