Node.js如何在項(xiàng)目中操作MySQL
1、在項(xiàng)目中操作 MySQL的步驟
(1)安裝操作 MySQL 數(shù)據(jù)庫(kù)的第三方模塊(mysql)
(2)通過(guò) mysql 模塊連接到 MySQL 數(shù)據(jù)庫(kù)
(3)通過(guò) mysql 模塊執(zhí)行 SQL 語(yǔ)句
2、安裝與配置 mysql 模塊
1、安裝 mysql 模塊
Mysql 模塊是托管于 npm
上的第三方模塊。它提供了在 Node.js 項(xiàng)目中連接和操作 MySQL 數(shù)據(jù)庫(kù)的能力。
想要在項(xiàng)目中使用它,需要先運(yùn)行如下命令,將 mysql 安裝為項(xiàng)目的依賴包:
npm install mysql
如下:
2、配置 mysql 模塊
如下圖,我的MySQL 數(shù)據(jù)庫(kù)中有如下數(shù)據(jù):
在使用 mysql 模塊操作 MySQL 數(shù)據(jù)庫(kù)之前,必須先對(duì) mysql 模塊進(jìn)行必要的配置,主要的配置步驟如下:
//導(dǎo)入模塊 const mysql = require('mysql') //建立與mysql數(shù)據(jù)庫(kù)的聯(lián)系 const db = mysql.createPool({ host:'127.0.0.1', //數(shù)據(jù)庫(kù)的IP地址 user:'root', //登錄數(shù)據(jù)庫(kù)的賬號(hào) password:'******',//登錄數(shù)據(jù)庫(kù)的密碼 database:'bear2' //指定要操作哪個(gè)數(shù)據(jù)庫(kù) })
3、測(cè)試 mysql 模塊能否正常工作
調(diào)用 db.query()
函數(shù),指定要執(zhí)行的 SQL 語(yǔ)句,通過(guò)回調(diào)函數(shù)拿到執(zhí)行的結(jié)果:
//測(cè)試mysql能否正常工作 db.query('SELECT 1',(err,results)=>{ if(err) return console.log(err.message) //能夠成功的執(zhí)行SQL語(yǔ)句 console.log(results) })
測(cè)試結(jié)果為:
3、使用 mysql 模塊操作 MySQL 數(shù)據(jù)庫(kù)
1、查詢數(shù)據(jù)
查詢 student
表中所有的數(shù)據(jù):
db.query('SELECT * FROM STUDENT',(err,results)=>{ //查詢失敗 if(err) return console.log(err.message) //查詢成功 console.log(results) })
結(jié)果為:
查詢成功,且得到的結(jié)果是一個(gè)數(shù)組。
2、插入數(shù)據(jù)
向 student
表中新增數(shù)據(jù), 其中 cname
為 '小延'
,age
為 16
。示例代碼如下:
//要插入到student表中的數(shù)據(jù)對(duì)象 const student = {cname:'小延',age:16} //待執(zhí)行的SQL語(yǔ)句,其中英文的?表示占位符 const sqlStr = 'INSERT INTO student(cname,age)VALUES(?,?)' //使用數(shù)組的形式,依次為占位符指定具體的值 db.query(sqlStr,[student.cname,student.age],(err,results)=>{ if(err) return console.log(err.message) //失敗 if(results.affectedRows === 1){ console.log('插入成功') //成功 } })
結(jié)果為:
打開(kāi)數(shù)據(jù)庫(kù),查看數(shù)據(jù),即:
數(shù)據(jù)插入成功。
3、插入數(shù)據(jù)的便捷方式
向表中新增數(shù)據(jù)時(shí),如果數(shù)據(jù)對(duì)象的每個(gè)屬性和數(shù)據(jù)表的字段一一對(duì)應(yīng),則可以通過(guò)如下方式快速插入數(shù)據(jù):
//要插入到student表中的數(shù)據(jù)對(duì)象 const student = {cid:9,cname:'小楊',age:18,class_id:1002} //待執(zhí)行的SQL語(yǔ)句,其中英文的?表示占位符 const sqlStr = 'INSERT INTO student SET ?' //直接將數(shù)據(jù)對(duì)象當(dāng)做占位符的值 db.query(sqlStr,student,(err,results)=>{ if(err) return console.log(err.message) //失敗 if(results.affectedRows === 1) console.log('插入數(shù)據(jù)成功!') })
結(jié)果為:
打開(kāi)數(shù)據(jù)庫(kù),查看數(shù)據(jù),即:
數(shù)據(jù)插入成功。
4、更新數(shù)據(jù)
可以通過(guò)如下方式,更新表中的數(shù)據(jù):
//要更新的數(shù)據(jù)對(duì)象 const student = {cid: 8, cname: '小欣', age: 18, class_id: 1002} //要執(zhí)行的SQL語(yǔ)句 const sqlStr = 'UPDATE student SET cname=?,age=?,class_id=? WHERE cid=?' //調(diào)用db.query()執(zhí)行SQL語(yǔ)句的同時(shí),使用數(shù)組依次為占位符指定具體的值 db.query(sqlStr,[student.cname,student.age,student.class_id],(err,results)=>{ if(err) return console.log(err.message) //失敗 if(results.affectedRows === 1) { console.log('更新數(shù)據(jù)成功!') } })
結(jié)果為:
打開(kāi)數(shù)據(jù)庫(kù),查看數(shù)據(jù),即:
數(shù)據(jù)更新成功。
5、更新數(shù)據(jù)的便捷方式
更新表數(shù)據(jù)時(shí),如果數(shù)據(jù)對(duì)象的每個(gè)屬性和數(shù)據(jù)表的字段一一對(duì)應(yīng),則可以通過(guò)如下方式快速更新表數(shù)據(jù):
const student = {cid:1,cname:'小鈺',age:17,class_id:1003} //要執(zhí)行的SQL語(yǔ)句 const sqlStr = 'UPDATE student SET ? WHERE cid=?' 調(diào)用db.query()執(zhí)行SQL語(yǔ)句的同時(shí),使用數(shù)組依次為占位符指定具體的值 db.query(sqlStr,[student,student.cid],(err,results)=>{ if(err) return console.log(err.message) //失敗 if(results.affectedRows === 1){ console.log('數(shù)據(jù)更新成功!') //成功 } })
結(jié)果為:
打開(kāi)數(shù)據(jù)庫(kù),查看數(shù)據(jù),即:
數(shù)據(jù)更新成功。
6、刪除數(shù)據(jù)
在刪除數(shù)據(jù)時(shí),最好根據(jù) cid
這樣的唯一標(biāo)識(shí),來(lái)刪除對(duì)應(yīng)的數(shù)據(jù)。示例如下:
//要執(zhí)行的SQL語(yǔ)句 const sqlStr = 'DELETE FROM student WHERE cid=?' //調(diào)用db.query()執(zhí)行sql語(yǔ)句的同時(shí),為占位符指定確定的值 db.query(sqlStr,3,(err,results)=>{ if(err) return console.log(err.message) if(results.affectedRows === 1){ // 失敗 console.log('刪除數(shù)據(jù)成功!') //成功 } })
結(jié)果為:
打開(kāi)數(shù)據(jù)庫(kù),查看數(shù)據(jù),即:
刪除數(shù)據(jù)成功。
需要注意的是:如果SQL語(yǔ)句有多個(gè)占位符,則必須為每個(gè)占位符指定具體的值,如果SQL語(yǔ)句只有一個(gè)占位符,則可以省略數(shù)組。
7、標(biāo)記刪除
使用 DELETE
語(yǔ)句,會(huì)把真正的把數(shù)據(jù)從表中刪除掉。為了保險(xiǎn)起見(jiàn),推薦使用標(biāo)記刪除的形式,來(lái)模擬刪除的動(dòng)作。
所謂的標(biāo)記刪除,就是在表中設(shè)置類似于 class_id
這樣的狀態(tài)字段,來(lái)標(biāo)記當(dāng)前這條數(shù)據(jù)是否被刪除。
當(dāng)用戶執(zhí)行了刪除的動(dòng)作時(shí),我們并沒(méi)有執(zhí)行 DELETE
語(yǔ)句把數(shù)據(jù)刪除掉,而是執(zhí)行了 UPDATE
語(yǔ)句,將這條數(shù)據(jù)對(duì)應(yīng)的class_id
字段標(biāo)記為刪除即可。
//標(biāo)記刪除:使用UPDATE語(yǔ)句代替DELETE語(yǔ)句;只更新數(shù)據(jù)的狀態(tài),并沒(méi)有真正刪除。 db.query('UPDATE student SET class_id=? WHERE cid=?',[1000,6],(err,results)=>{ if(err) return console.log(err.message) if(results.affectedRows === 1){ // 失敗 console.log('標(biāo)記刪除成功!') //成功 } })
結(jié)果為:
打開(kāi)數(shù)據(jù)庫(kù),查看數(shù)據(jù),即:
標(biāo)記刪除成功。
以上就是Node.js如何在項(xiàng)目中操作MySQL的詳細(xì)內(nèi)容,更多關(guān)于Node.js操作MySQL的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Node.js 實(shí)現(xiàn)簡(jiǎn)單的接口服務(wù)器的實(shí)例代碼
這篇文章主要介紹了Node.js 實(shí)現(xiàn)簡(jiǎn)單的接口服務(wù)器的實(shí)例代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-05-05詳解nodejs中exports和module.exports的區(qū)別
本文主要介紹了exports 和 module.exports 的區(qū)別。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02利用yarn代替npm管理前端項(xiàng)目模塊依賴的方法詳解
這篇文章主要給大家介紹了關(guān)于利用yarn代替npm管理前端項(xiàng)目模塊依賴的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09nodejs socket實(shí)現(xiàn)的服務(wù)端和客戶端功能示例
這篇文章主要介紹了nodejs socket實(shí)現(xiàn)的服務(wù)端和客戶端功能,結(jié)合具體實(shí)例形式分析了nodejs基于socket通信實(shí)現(xiàn)的服務(wù)端與客戶端功能相關(guān)操作技巧,需要的朋友可以參考下2017-06-06Node.js API詳解之 repl模塊用法實(shí)例分析
這篇文章主要介紹了Node.js API詳解之 repl模塊用法,結(jié)合實(shí)例形式分析了Node.js API中repl模塊基本功能、函數(shù)、使用方法及操作注意事項(xiàng),需要的朋友可以參考下2020-05-05NodeJS 實(shí)現(xiàn)手機(jī)短信驗(yàn)證模塊阿里大于功能
這篇文章主要介紹了NodeJS 實(shí)現(xiàn)手機(jī)短信驗(yàn)證模塊阿里大于功能,需要的朋友可以參考下2017-06-06