NodeJS連接MySQL數(shù)據(jù)庫(kù)并進(jìn)行增刪改查操作詳解
驅(qū)動(dòng)安裝
npm install mysql
連接數(shù)據(jù)庫(kù)
在以下實(shí)例中根據(jù)你的實(shí)際配置修改數(shù)據(jù)庫(kù)用戶名、及密碼及數(shù)據(jù)庫(kù)名:
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
database: 'gov'
});
connection.connect(); // 連接數(shù)據(jù)庫(kù)
connection.query('select * from gov_policy', function (error, results, fields) {
if (error) throw error;
console.log('The results is: ', results);
console.log(fields);
});
connection.end() // 關(guān)閉連接數(shù)據(jù)庫(kù)連接參數(shù)說(shuō)明
| 參數(shù) | 描述 |
|---|---|
| host | 主機(jī)地址 (默認(rèn):localhost) |
| user | 用戶名 |
| password | 密碼 |
| port | 端口號(hào) (默認(rèn):3306) |
| database | 數(shù)據(jù)庫(kù)名 |
| charset | 連接字符集(默認(rèn):'UTF8_GENERAL_CI',注意字符集的字母都要大寫(xiě)) |
| localAddress | 此IP用于TCP連接(可選) |
| socketPath | 連接到unix域路徑,當(dāng)使用 host 和 port 時(shí)會(huì)被忽略 |
| timezone | 時(shí)區(qū)(默認(rèn):'local') |
| connectTimeout | 連接超時(shí)(默認(rèn):不限制;單位:毫秒) |
| stringifyObjects | 是否序列化對(duì)象 |
| typeCast | 是否將列值轉(zhuǎn)化為本地JavaScript類(lèi)型值 (默認(rèn):true) |
| queryFormat | 自定義query語(yǔ)句格式化方法 |
| supportBigNumbers | 數(shù)據(jù)庫(kù)支持bigint或decimal類(lèi)型列時(shí),需要設(shè)此option為true (默認(rèn):false) |
| bigNumberStrings | supportBigNumbers和bigNumberStrings啟用 強(qiáng)制bigint或decimal列以JavaScript字符串類(lèi)型返回(默認(rèn):false) |
| dateStrings | 強(qiáng)制timestamp,datetime,data類(lèi)型以字符串類(lèi)型返回,而不是JavaScript Date類(lèi)型(默認(rèn):false) |
| debug | 開(kāi)啟調(diào)試(默認(rèn):false) |
| multipleStatements | 是否許一個(gè)query中有多個(gè)MySQL語(yǔ)句 (默認(rèn):false) |
| flags | 用于修改連接標(biāo)志 |
| ssl | 使用ssl參數(shù)(與crypto.createCredenitals參數(shù)格式一至)或一個(gè)包含ssl配置文件名稱的字符串,目前只捆綁Amazon RDS的配置文件 |
- 更多說(shuō)明可參見(jiàn):https://github.com/mysqljs/mysql
數(shù)據(jù)庫(kù)操作( CURD )
在進(jìn)行數(shù)據(jù)庫(kù)操作前,你可以對(duì)現(xiàn)有的數(shù)據(jù)進(jìn)行操作,也可以新建數(shù)據(jù)來(lái)進(jìn)行操作,也可以使用NodeJS的Faker模塊產(chǎn)生批量的假數(shù)據(jù)來(lái)操作。本教程測(cè)試的 MySQL 用戶名為 root,密碼為 root,數(shù)據(jù)庫(kù)為 gov,你需要根據(jù)自己配置情況修改。
查詢數(shù)據(jù)
執(zhí)行以下代碼即可查詢出數(shù)據(jù):
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
port: '3306',
database: 'gov'
});
connection.connect();
var sql = 'select * from gov_policy';
//查
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í)行以上命令輸出就結(jié)果為:
$ 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: 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ù)表中插入數(shù)據(jù):
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
port: '3306',
database: 'gov'
});
connection.connect();
var addSql = 'INSERT INTO websites(Id,name,url,alexa,country) VALUES(0,?,?,?,?)';
var addSqlParams = ['博客論壇', 'https://segmentfault.com', 'NodeJS', 'China'];
//增
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();更新數(shù)據(jù)
我們也可以對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行修改:
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
port: '3306',
database: 'gov'
});
connection.connect();
var modSql = 'UPDATE websites SET name = ?,url = ? WHERE Id = ?';
var modSqlParams = ['思否論壇', 'https://segmentfault.com', 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();輸出的結(jié)果為:
--------------------------UPDATE---------------------------- UPDATE affectedRows 1 -----------------------------------------------------------------
刪除數(shù)據(jù)
我們可以使用以下代碼來(lái)刪除 id 為 6 的數(shù)據(jù):
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
port: '3306',
database: 'gov'
});
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í)行以下命令輸出就結(jié)果為:
--------------------------DELETE---------------------------- DELETE affectedRows 1 -----------------------------------------------------------------
流式讀取數(shù)據(jù)
當(dāng)數(shù)據(jù)有幾千萬(wàn)條的時(shí)候,上面普通的查詢操作會(huì)導(dǎo)致內(nèi)存占用過(guò)高,也就是數(shù)據(jù)會(huì)先緩存下來(lái),然后再返回給我們,如果數(shù)據(jù)龐大就需要采用流式讀取的方式,占用內(nèi)存少:
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
port: '3306',
database: 'gov'
});
connection.connect();
var sql = 'SELECT * FROM gov_policy_old';
const query = connection.query(sql);
query.on('error', function (err) {
console.log(err);
}).on('fields', function (fields) {
// console.log(fields);
}).on('result', function (row) {
console.log(row['title']);
}).on('end', function () {
connection.end();
})參考
以上就是NodeJS連接MySQL數(shù)據(jù)庫(kù)并進(jìn)行增刪改查操作詳解的詳細(xì)內(nèi)容,更多關(guān)于NodeJS連接MySQL數(shù)據(jù)庫(kù)并進(jìn)行增刪改查操作詳解的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
node.js實(shí)現(xiàn)簡(jiǎn)單的壓縮/解壓縮功能示例
這篇文章主要介紹了node.js實(shí)現(xiàn)簡(jiǎn)單的壓縮/解壓縮功能,結(jié)合實(shí)例形式分析了node.js實(shí)現(xiàn)本地文件與服務(wù)器端壓縮/解壓縮相關(guān)操作技巧,需要的朋友可以參考下2019-11-11
從零開(kāi)始學(xué)習(xí)Node.js系列教程之設(shè)置HTTP頭的方法示例
這篇文章主要介紹了Node.js設(shè)置HTTP頭的方法,詳細(xì)分析了常見(jiàn)HTTP頭的功能、原理及相關(guān)設(shè)置操作技巧,需要的朋友可以參考下2017-04-04
HBuilder中報(bào)錯(cuò)cli項(xiàng)目運(yùn)行依賴本地的Nodejs環(huán)境解決方法
使用Node.js,可以方便地開(kāi)發(fā)服務(wù)器端應(yīng)用程序,如Web應(yīng)用、API、后端服務(wù),還可以通過(guò)Node.js構(gòu)建命令行工具等,這篇文章主要介紹了HBuilder中報(bào)錯(cuò)cli項(xiàng)目運(yùn)行依賴本地的Nodejs環(huán)境的相關(guān)資料,需要的朋友可以參考下2026-03-03
關(guān)于Error:EPERM:operation?not?permitted,mkdir...的幾種解決辦法對(duì)比
這篇文章主要給大家介紹了關(guān)于Error:EPERM:operation?not?permitted,mkdir...的幾種解決辦法對(duì)比,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-01-01

