Node.js 連接 MySQL

2023-02-28 13:48 更新

本章節(jié)我們將為大家介紹如何使用 Node.js 來連接 MySQL,并對數(shù)據(jù)庫進行操作。

如果你還沒有 MySQL 的基本知識,可以參考我們的教程:MySQL 教程。

本教程使用到的 Websites 表 SQL 文件:websites.sql。

安裝驅(qū)動

本教程使用了淘寶定制的 cnpm 命令進行安裝:

$ cnpm install mysql

連接數(shù)據(jù)庫

在以下實例中根據(jù)你的實際配置修改數(shù)據(jù)庫用戶名、及密碼及數(shù)據(jù)庫名:

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);
});

執(zhí)行以下命令輸出結果為:

$ node test.js
The solution is: 2

數(shù)據(jù)庫連接參數(shù)說明:

參數(shù) 描述
host 主機地址 (默認:localhost)
  user 用戶名
  password 密碼
  port 端口號 (默認:3306)
  database 數(shù)據(jù)庫名
  charset 連接字符集(默認:'UTF8_GENERAL_CI',注意字符集的字母都要大寫)
  localAddress 此IP用于TCP連接(可選)
  socketPath 連接到unix域路徑,當使用 host 和 port 時會被忽略
  timezone 時區(qū)(默認:'local')
  connectTimeout 連接超時(默認:不限制;單位:毫秒)
  stringifyObjects 是否序列化對象
  typeCast 是否將列值轉化為本地JavaScript類型值 (默認:true)
  queryFormat 自定義query語句格式化方法
  supportBigNumbers 數(shù)據(jù)庫支持bigint或decimal類型列時,需要設此option為true (默認:false)
  bigNumberStrings supportBigNumbers和bigNumberStrings啟用 強制bigint或decimal列以JavaScript字符串類型返回(默認:false)
  dateStrings 強制timestamp,datetime,data類型以字符串類型返回,而不是JavaScript Date類型(默認:false)
  debug 開啟調(diào)試(默認:false)
  multipleStatements 是否許一個query中有多個MySQL語句 (默認:false)
  flags 用于修改連接標志
  ssl 使用ssl參數(shù)(與crypto.createCredenitals參數(shù)格式一至)或一個包含ssl配置文件名稱的字符串,目前只捆綁Amazon RDS的配置文件

更多說明可參見:https://github.com/mysqljs/mysql

數(shù)據(jù)庫操作( CURD )

在進行數(shù)據(jù)庫操作前,你需要將本站提供的 Websites 表 SQL 文件websites.sql 導入到你的 MySQL 數(shù)據(jù)庫中。

本教程測試的 MySQL 用戶名為 root,密碼為 123456,數(shù)據(jù)庫為 test,你需要根據(jù)自己配置情況修改。

查詢數(shù)據(jù)

將上面我們提供的 SQL 文件導入數(shù)據(jù)庫后,執(zhí)行以下代碼即可查詢出數(shù)據(jù):

查詢數(shù)據(jù)

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();

執(zhí)行以下命令輸出就結果為:

$ 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.o2fo.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' } ] ------------------------------------------------------------

插入數(shù)據(jù)

我們可以向數(shù)據(jù)表 websties 插入數(shù)據(jù):

插入數(shù)據(jù)

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://123.w3cschool.cn/webtools','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();

執(zhí)行以下命令輸出就結果為:

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

更新數(shù)據(jù)

我們也可以對數(shù)據(jù)庫的數(shù)據(jù)進行修改:

更新數(shù)據(jù)

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.w3cschool.cn',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();

執(zhí)行以下命令輸出就結果為:

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

刪除數(shù)據(jù)

我們可以使用以下代碼來刪除 id 為 6 的數(shù)據(jù):

刪除數(shù)據(jù)

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();

執(zhí)行以下命令輸出就結果為:

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





以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號