この章では、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
| パラメータ | 説明 |
|---|---|
| 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 >
このチュートリアルでテストした 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 のデータが削除されていることがわかります。