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

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

ドライバーをインストールします

$ cnpm install mysql

データベースに接続します

次の例では、実際の構成に従ってデータベースのユーザー名、パスワード、およびデータベース名を変更します。

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	

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

< /tr>
パラメータ 説明
host ホストアドレス (デフォルト: localhost)
user ユーザー名
password パスワード
port ポート番号 (デフォルト: 3306)
database データベース名
charset 接続文字セット (デフォルト: 'UTF8_GENERAL_CI'、文字セットの文字は大文字にする必要があることに注意してください)
localAddress この IP は TCP 接続に使用されます (オプション)
socketPath UNIX ドメイン パスに接続します。ホストとポートを使用する場合は無視されます
timezone タイムゾーン (デフォルト: 'local')
connectTimeout 接続タイムアウト (デフォルト: 無制限、単位: ミリ秒)
stringifyObjects オブジェクトをシリアル化するかどうか
typeCast 列の値をネイティブ JavaScript 型の値に変換するかどうか (デフォルト: true)
queryFormat カスタム クエリ ステートメントの書式設定方法
supportBigNumbers データベースが bigint または 10 進数タイプの列をサポートする場合、このオプションを true (デフォルト: false) に設定する必要があります。
bigNumberStrings supportBigNumbers および bigNumberStrings が有効になります bigint または 10 進数の列が JavaScript 文字列型として返されるように強制します (デフォルト: false)
dateStrings タイムスタンプ、日時、およびデータ型が JavaScript の日付型ではなく文字列として返されるように強制します (デフォルト: false)
debug デバッグを有効にする (デフォルト: false)
multipleStatements クエリ内で複数の MySQL ステートメントを許可するかどうか (デフォルト: false)
flags 接続フラグの変更に使用されます
ssl ssl パラメータ (crypto.createCredenitals パラメータと同じ形式) または ssl 設定ファイルの名前を含む文字列を使用します。現在、Amazon RDS 設定ファイルのみがバンドルされています。

詳細な手順については、https://github.com/mysqljs/mysql<を参照してください。 /p >

データベース操作 ( CURD )

このチュートリアルでテストした 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: 'taobao',
    url: 'https://www.taobao.com/',
    alexa: 13,
    country: 'CN' },
  RowDataPacket {
    id: 3,
    name: 'w3cstudy',
    url: 'https://w3cstudy.cc/',
    alexa: 4689,
    country: 'CN' },
  RowDataPacket {
    id: 4,
    name: 'weibo',
    url: 'http://weibo.com/',
    alexa: 20,
    country: 'CN' },
  RowDataPacket {
    id: 5,
    name: 'Facebook',
    url: 'https://www.facebook.com/',
    alexa: 3,
    country: 'USA' } ]
------------------------------------------------------------

データを挿入

データ テーブル Websties にデータを挿入できます。

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 = ['w3cstudy', 'https://w3cstudy.cc/','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 = ['w3cstudy', 'https://w3cstudy.cc/',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 のデータが削除されていることがわかります。