本章節我們将為大家介紹如何使用 Node.js 來連接配接 MySQL,并對資料庫進行操作。
如果你還沒有 MySQL 的基本知識,可以參考我們的教程:MySQL 教程。
本教程使用到的 Websites 表 SQL 檔案:websites.sql。
本教程使用了淘寶定制的 cnpm 指令進行安裝:
在以下執行個體中根據你的實際配置修改資料庫使用者名、及密碼及資料庫名:
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域路徑,當使用 host 和 port 時會被忽略
timezone
時區(預設:'local')
connectTimeout
連接配接逾時(預設:不限制;機關:毫秒)
stringifyObjects
是否序列化對象
typeCast
是否将列值轉化為本地JavaScript類型值 (預設:true)
queryFormat
自定義query語句格式化方法
supportBigNumbers
資料庫支援bigint或decimal類型列時,需要設此option為true (預設:false)
bigNumberStrings
supportBigNumbers和bigNumberStrings啟用 強制bigint或decimal列以JavaScript字元串類型傳回(預設:false)
dateStrings
強制timestamp,datetime,data類型以字元串類型傳回,而不是JavaScript Date類型(預設:false)
debug
開啟調試(預設:false)
multipleStatements
是否許一個query中有多個MySQL語句 (預設:false)
flags
用于修改連接配接标志
ssl
使用ssl參數(與crypto.createCredenitals參數格式一至)或一個包含ssl配置檔案名稱的字元串,目前隻捆綁Amazon RDS的配置檔案
更多說明可參見:https://github.com/mysqljs/mysql
在進行資料庫操作前,你需要将本站提供的 Websites 表 SQL 檔案websites.sql 導入到你的 MySQL 資料庫中。
本教程測試的 MySQL 使用者名為 root,密碼為 123456,資料庫為 test,你需要根據自己配置情況修改。
将上面我們提供的 SQL 檔案導入資料庫後,執行以下代碼即可查詢出資料:
var mysql = require('mysql');
port: '3306',
database: 'test'
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();
執行以下指令輸出就結果為:
我們可以向資料表 websties 插入資料:
var addSql = 'INSERT INTO websites(Id,name,url,alexa,country) VALUES(0,?,?,?,?)';
var addSqlParams = ['菜鳥工具', 'https://c.runoob.com','23453', 'CN'];
//增
connection.query(addSql,addSqlParams,function (err, result) {
console.log('[INSERT ERROR] - ',err.message);
console.log('--------------------------INSERT----------------------------');
//console.log('INSERT ID:',result.insertId);
console.log('INSERT ID:',result);
console.log('-----------------------------------------------------------------\n\n');
執行成功後,檢視資料表,即可以看到添加的資料:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZwpmL3Y0NxIURBVzMFFENtMDRwkTL3UTR00yMGVDNtUzQ3IDRyUUMvw1Mw8CX3EDMy8CXzRWYvxGc19CX05WZ052bj1Cc39CXt92YuI2bv5Wdy5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
我們也可以對資料庫的資料進行修改:
var modSql = 'UPDATE websites SET name = ?,url = ? WHERE Id = ?';
var modSqlParams = ['菜鳥移動站', 'https://m.runoob.com',6];
//改
connection.query(modSql,modSqlParams,function (err, result) {
console.log('[UPDATE ERROR] - ',err.message);
console.log('--------------------------UPDATE----------------------------');
console.log('UPDATE affectedRows',result.affectedRows);
執行成功後,檢視資料表,即可以看到更新的資料:
我們可以使用以下代碼來删除 id 為 6 的資料:
var delSql = 'DELETE FROM websites where id=6';
//删
connection.query(delSql,function (err, result) {
console.log('[DELETE ERROR] - ',err.message);
console.log('--------------------------DELETE----------------------------');
console.log('DELETE affectedRows',result.affectedRows);
執行成功後,檢視資料表,即可以看到 id=6 的資料已被删除: