Nodejs操作MySql數據庫詳解
Nodejs操作MySql數據庫前提是,你已安裝MySQL數據庫和Nodejs。
關於MySQL8.0.19數據庫安裝與簡單使用
https://blog.csdn.net/cnds123/article/details/104454487
關於Node.js可以參見Node.js 新手入門
https://blog.csdn.net/cnds123/article/details/104559497
在cmd中使用node -v命令來查看當前是否安裝 Node 版本,若安裝出現如下圖所示版本號信息,說明已安裝Node.js:
新版的nodejs已經集成了npm,所以安裝nodejs時npm也一併安裝好了。可以通過輸入
npm -v
來測試是否成功安裝。出現版本提示表示已安裝。:
要想使用Node操作MySql數據庫,除了已安裝MySQL數據庫和Nodejs,還需要安裝mysql模塊(包)——node. 操作 MySQL的驅動程序。
npm install mysql 即可安裝mysql模塊(包),參見下圖:
其中有幾條警告(WARN)可以先不管。
【若安裝不了mysql模塊(包),使用淘寶鏡像去安裝】
安裝完之後如果要使用在代碼中引入就可以了:
mysql = require('mysql')
例、建立一個名connTest.js腳本文件,用來測試連接,若連接成功將提示“connected as id XX”,其內容如下:
/*引入mysql模塊*/
const mysql = require('mysql');
/*創建連接*/
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: ''
});
/*連接mysql*/
connection.connect(function (err) {
/*連接出錯的處理*/
if (err) {
console.error('error connecting: ' + err.stack);
return;
}
console.log('connected as id ' + connection.threadId);
});
/*關閉連接mysql*/
connection.end();
使用node connTest.js運行它,參見下圖:
常見問題:node.js 連接mysql報錯:error:cannot find module 'mysql'
原因:js文件(如test.js)和mysql模塊(包)安裝的路徑不一致
解決辦法:
法一、把JS腳本文件放到紅框標出的目錄中,然後再運行node connTest.js
查看安裝過的模塊和包的安裝位置
npm ls 名字 -g
其中-g查看全局的模塊和包信息,去掉查看本地的
如查看mysql模塊和包的位置:npm ls mysql
法二、在cmd中切換到“js文件”所在的目錄(connTest.js所在的目錄D:\NodeTest)運行npm安裝mysql包(提示,在D:\NodeTest中產生node_modules子目錄),再運行node connTest.js
我的connTest.js保存在D:\NodeTest,參見下圖:
D:\NodeTest中產生的node_modules子目錄,包含你安裝的mysql模塊(包)。
連接成功,對mysql數據庫的查詢、添加數據等操作就可以進行了。
現在建立一個創建數據庫的腳本文件,文件名爲nodejs_mysql_DB.js,保存在D:\NodeTest中
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost", user: "root", password: ""
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
con.query("CREATE DATABASE mysrcDB", function (err, result) {
if (err) throw err;
console.log("Database created");
});
});
/*關閉連接mysql*/
con.end();
腳本文件nodejs_mysql_DB.js用於創建名爲mysrcDB的數據庫。運行此腳本node nodejs_mysql_DB.js,參見下圖:
現在建立一個名爲mysqlTest.js的腳本文件,對mysrcDB的數據庫建表MYTABLE、插入數據、更新數據、更新數據等操作,內容如下:
// 引入Mysql
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '',
database : 'mysrcDB'
});
// 執行數據庫連接
connection.connect();
var sqlstring = "";
// 創建表
sqlstring = "Create Table MYTABLE (name VARCHAR(20), sex CHAR(1))"
connection.query(sqlstring, function (err, results, fields) {
if (err) {
console.log('[UPDATE ERROR] - ', err.message);
return;
}
console.log('--------------------------CREATE----------------------------');
console.log('CREATE TABLE:', results);
console.log('------------------------------------------------------------\n\n');
});
// 插入數據
sqlstring = "Insert into MYTABLE Values('Michael', 'm')";
connection.query(sqlstring, function (err, result) {
if(err){
console.log('[INSERT ERROR] - ', err.message);
return;
}
console.log('--------------------------INSERT----------------------------');
console.log('INSERT ID - ', result);
console.log('------------------------------------------------------------\n\n');
});
// 更新數據
sqlstring = "Update MYTABLE Set name = 'Michael Jordan' Where sex = 'm'";
connection.query(sqlstring, 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');
});
// 查詢數據
sqlstring = "Select * From MYTABLE";
connection.query(sqlstring, function (err, result) {
if(err){
console.log('[SELECT ERROR] - ', err.message);
return;
}
console.log('--------------------------SELECT---------------------------');
console.log('SELECT - ', result);
console.log('------------------------------------------------------------\n\n');
});
//刪除數據
sqlstring = "Delete From MYTABLE";
connection.query(sqlstring, 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');
});
//刪除表格
sqlstring = "Drop Table MYTABLE";
connection.query(sqlstring, function (err, result) {
if(err){
console.log('[DROP ERROR] - ', err.message);
return;
}
console.log('--------------------------DROP-----------------------------');
console.log('DROP TABLE :', result.affectedRows);
console.log('------------------------------------------------------------\n\n');
});
// 斷開數據庫連接
connection.end();
【說明
MySql數據庫連接參數說明:
參數 描述
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的配置文件
】
運行此腳本node mysqlTest.js,參見下圖:
Nodejs操作MySql數據庫小結:
連接到MySQL數據庫服務器;
對象上的query()方法來執行SQL語句;
關閉數據庫連接。