node.js對(duì)于數(shù)據(jù)庫(kù)MySQL基本操作實(shí)例總結(jié)【增刪改查】
數(shù)據(jù)庫(kù)MySQL基本操作(增刪改查)
整個(gè)博客統(tǒng)一表結(jié)構(gòu)為:
users表 四個(gè)字段id username password status,四個(gè)字段代表四列,其中id為自增列,status默認(rèn)值為0,可選值0,1
id自增, username分別為zs,ls,wu password分別為:123456 abcdef 123abc status為0,1,1
#查詢整張表的所有數(shù)據(jù) select * from users #查詢指定列的所有數(shù)據(jù) select username,password from users #指定某列添加數(shù)據(jù) insert into users(username,password) values('蕭寂','1234') #指定某列修改數(shù)據(jù) update users set username="你好a",password="1234567",status=1 where id=2 #根據(jù)id刪除行 delete from users where id=4 #查詢status為1的所有用戶 SELECT *FROM users WHERE status=1 #查詢id 大于2的所有用戶 SELECT *FROM users WHERE id>2 #查詢username不等于admin的所有用戶 SELECT *FROM users WHERE username<>'admin' #使用AND來(lái)顯示所有status為0,并且id 小于3的用戶: SELECT * FROM users WHERE status=0 AND id<3 #使用OR來(lái)顯示所有status為1,或者username為zs的用戶 SELECT* FROM users WHERE status=1 OR username='zs' #對(duì)users表中的數(shù)據(jù),按照status字段進(jìn)行升序排序 SELECT * FROM users ORDER BY status;(升序排序在status后加上ASC效果等同) select * from users order by status asc #根據(jù)id降序排序,降序排序使用desc關(guān)鍵字 select * from users order by id desc #多重排序 對(duì)users 表中的數(shù)據(jù),先按照status字段進(jìn)行降序排序,再按照username的字母順序,進(jìn)行升序排序 SELECT * FROM users ORDER BY status DESC,username asc #查詢id為1的數(shù)據(jù)返回的總條數(shù) select count(*) from users where id=1 #將列名稱從COUNT(*)修改為total SELECT COUNT(*) AS total FROM users WHERE id=1 #給username列添加uname別名,給password列添加upwd別名 select username as uname,password as upwd from users
node.js項(xiàng)目中的增刪改查
首先先執(zhí)行命令初始化package.json包
npm init -y (文件名為英文,不能有空格、特殊字符或中文,否則報(bào)錯(cuò))
mysql模塊是托管于npm 上的第三方模塊。它提供了在Node.js項(xiàng)目中連接和操作MySQL數(shù)據(jù)庫(kù)的能力。
想要在項(xiàng)目中使用它,需要先運(yùn)行如下命令,將mysql安裝為項(xiàng)目的依賴包:
npm install mysql 或者 npm i mysql
上面操作完成后開(kāi)始配置MySQL模塊
配置MySQL模塊
在使用mysql模塊操作MySQL數(shù)據(jù)庫(kù)之前,必須先對(duì) mysql模塊進(jìn)行必要的配置,主要的配置步驟如下:
//導(dǎo)入MySQL模塊 const mysql = require("mysql") //建立與MySQL數(shù)據(jù)庫(kù)的連接 const db = mysql.createPool({ host: "127.0.0.1", //數(shù)據(jù)庫(kù)的IP地址 user: "root", //登錄數(shù)據(jù)庫(kù)的賬號(hào) password: "admin", //登錄數(shù)據(jù)庫(kù)的密碼 database: "xiaoji" //指定要操作哪個(gè)數(shù)據(jù)庫(kù) })
測(cè)試模塊能否正常連接工作(執(zhí)行運(yùn)行命令node 文件名 或者 nodemon 文件名)
調(diào)用
db.query()
函數(shù),指定要執(zhí)行的SQL語(yǔ)句,通過(guò)回調(diào)函數(shù)拿到執(zhí)行的結(jié)果
db.query("select 1", function (err, results) { //模塊報(bào)錯(cuò)返回錯(cuò)誤信息 if (err) return console.log(err.message); //運(yùn)行成功 console.log(results); })
測(cè)試成功的返回結(jié)果為:[ RowDataPacket { ‘1’: 1 } ]
查詢表的SQL代碼(表名和結(jié)構(gòu)看第一行)
查詢數(shù)據(jù)user表中所有的用戶數(shù)據(jù) const sqlStr = "select * from users" db.query(sqlStr, function (err, results) { //查詢失敗 if (err) return console.log(err.message); //查詢成功 //注意如果執(zhí)行的是select查詢語(yǔ)句,則執(zhí)行的結(jié)果是數(shù)組 console.log(results); })
添加數(shù)據(jù)的SQL語(yǔ)句(兩種方法)
//插入數(shù)據(jù) //向users表中新增數(shù)據(jù),其中username為Spider-Man,password為pcc321 //要插入到users表中的數(shù)據(jù)對(duì)象 const user = { username: "Spider-Man", password: "pcc321" } //待執(zhí)行的SQL語(yǔ)句,其中的?表示占位符 const sqlStr = "insert into student(student,card) values(?,?)" //使用數(shù)組的形式,依次為?占位符具體的值(result.affectedRows為影響的行數(shù)) db.query(sqlStr, [user.username, user.password], function (err, results) { if (err) return console.log(err.message); if (results.affectedRows == 1) { console.log("插入成功"); } }) //向表中新增數(shù)據(jù)時(shí),如果數(shù)據(jù)對(duì)象的每個(gè)屬性和數(shù)據(jù)表的字段一一對(duì)應(yīng),則可以通過(guò)如下方式快速插入數(shù)據(jù): //要插入到users表中的數(shù)據(jù)對(duì)象 const user = { username: "Spider2-Man", password: "pcc321" } //待執(zhí)行的SQL語(yǔ)句,其中的?表示占位符 const sqlStr = "insert into users set ?" db.query(sqlStr, user, function (err, results) { if (err) return console.log(err.message); if (results.affectedRows == 1) { console.log("插入成功"); } })
修改數(shù)據(jù)的SQL語(yǔ)句(兩種方法)
//修改表中的數(shù)據(jù) //向users表中更新的數(shù)據(jù),其中username為Spider-Man,password為pcc321,id為5 const user = { id: 7, username: "xiao1jiao", password: "111222" } //待執(zhí)行的sql語(yǔ)句,其中的?表示占位符 const sqlStr = "update users set username=?,password=? where id=?" //使用數(shù)組的形式,依次為?占位符具體的值(result.affectedRows為影響的行數(shù)) db.query(sqlStr, [user.username, user.password, user.id], function (err, results) { if (err) return console.log(err.message); if (results.affectedRows == 1) { console.log("修改", user.id, "列成功"); } }) //修改表數(shù)據(jù)時(shí),如果數(shù)據(jù)對(duì)象的每個(gè)屬性和數(shù)據(jù)表的字段一一對(duì)應(yīng),則可以通過(guò)如下方式快速修改表數(shù)據(jù) //向users表中更新的數(shù)據(jù),其中username為aaaa,password為1111,id為5 const user = { id: 5, username: "aaaa", password: "1111" } //待執(zhí)行的sql語(yǔ)句,其中的?表示占位符 const sqlStr = "update users set ? where id=?" //使用數(shù)組的形式,依次為?占位符具體的值(result.affectedRows為影響的行數(shù)) db.query(sqlStr, [user, user.id], function (err, results) { if (err) return console.log(err.message); if (results.affectedRows == 1) { console.log("修改", user.id, "列成功"); } })
刪除數(shù)據(jù)的SQL語(yǔ)句
//在刪除數(shù)據(jù)時(shí),推薦根據(jù)id這樣的唯一標(biāo)識(shí),來(lái)刪除對(duì)應(yīng)的數(shù)據(jù)。示例如下: const sqlStr = "delete from users where id=?" //調(diào)用db.query(O)執(zhí)行SQL語(yǔ)句的同時(shí),為占位符指定具體的值 //注意:如果SQL語(yǔ)句中有多個(gè)占位符,則必須使用數(shù)組為每個(gè)占位符指定具體的值 //如果SQL語(yǔ)句中只有一個(gè)占位符,則可以省略數(shù)組 db.query(sqlStr, 5, function (err, results) { if (err) return console.log(err.message); //注意:執(zhí)行 delete語(yǔ)句之后,結(jié)果也是一個(gè)對(duì)象,也會(huì)包含 affectedRows屬性 if (results.affectedRows == 1) { console.log("刪除成功"); } })
標(biāo)記刪除的情況
//標(biāo)記刪除 //使用DELETE語(yǔ)句,會(huì)把真正的把數(shù)據(jù)從表中刪除掉。為了保險(xiǎn)起見(jiàn),推薦使用標(biāo)記刪除的形式,來(lái)模擬刪除的動(dòng)作。 //所謂的標(biāo)記刪除,就是在表中設(shè)置類似于status這樣的狀態(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)的status字段標(biāo)記為刪除即可。 //標(biāo)記刪除:使用 UPDATE語(yǔ)句替代 DELETE語(yǔ)句;只更新數(shù)據(jù)的狀態(tài),并沒(méi)有真正刪除 const sqlStr = "update users set status=? where id=?" db.query(sqlStr, [0, 7], function (err, results) { if (err) return console.log(err.message); if (results.affectedRows == 1) { console.log("標(biāo)記刪除成功"); } })
注:文章所述的?占位符標(biāo)記方法具有更好的兼容行,筆者曾經(jīng)做過(guò)測(cè)試,使用原生SQL語(yǔ)句拼接字段后直接使用db.query
語(yǔ)句執(zhí)行,結(jié)果在處理富文本數(shù)據(jù)的時(shí)候報(bào)出了錯(cuò)誤,需要進(jìn)行字符轉(zhuǎn)義處理。而使用?占位符則不會(huì)有這種情況出現(xiàn)。
因?yàn)?占位符操作會(huì)在解析的過(guò)程中自動(dòng)對(duì)傳入?yún)?shù)進(jìn)行編碼處理,進(jìn)一步增加了程序的安全性!
- node.js 開(kāi)發(fā)指南 – Node.js 連接 MySQL 并進(jìn)行數(shù)據(jù)庫(kù)操作
- Node.js數(shù)據(jù)庫(kù)操作之查詢MySQL數(shù)據(jù)庫(kù)(二)
- Node.js下向MySQL數(shù)據(jù)庫(kù)插入批量數(shù)據(jù)的方法
- Node.js操作mysql數(shù)據(jù)庫(kù)增刪改查
- Node.js數(shù)據(jù)庫(kù)操作之連接MySQL數(shù)據(jù)庫(kù)(一)
- node.js平臺(tái)下的mysql數(shù)據(jù)庫(kù)配置及連接
- 從零學(xué)習(xí)node.js之mysql數(shù)據(jù)庫(kù)的操作(五)
- Linux下為Node.js程序配置MySQL或Oracle數(shù)據(jù)庫(kù)的方法
- Node.js實(shí)現(xiàn)連接mysql數(shù)據(jù)庫(kù)功能示例
- Node.js對(duì)MySQL數(shù)據(jù)庫(kù)的增刪改查實(shí)戰(zhàn)記錄
- node.js如何操作MySQL數(shù)據(jù)庫(kù)
- Node.js實(shí)現(xiàn)http請(qǐng)求服務(wù)與Mysql數(shù)據(jù)庫(kù)操作方法詳解
相關(guān)文章
webpack創(chuàng)建項(xiàng)目并打包的詳細(xì)流程記錄
webpack在前端工程領(lǐng)域起到了中流砥柱的作用,理解它的內(nèi)部實(shí)現(xiàn)機(jī)制會(huì)對(duì)你的工程建設(shè)提供很大的幫助(不論是定制功能還是優(yōu)化打包),下面這篇文章主要給大家介紹了關(guān)于webpack創(chuàng)建項(xiàng)目并打包的詳細(xì)流程,需要的朋友可以參考下2023-03-03nodeJS實(shí)現(xiàn)路由功能實(shí)例代碼
本篇文章主要介紹了nodeJS實(shí)現(xiàn)路由功能實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06Nodejs爬蟲(chóng)進(jìn)階教程之異步并發(fā)控制
這篇文章主要介紹了Nodejs爬蟲(chóng)進(jìn)階教程之異步并發(fā)控制的相關(guān)資料,需要的朋友可以參考下2016-02-02nodejs實(shí)現(xiàn)郵件發(fā)送服務(wù)實(shí)例分享
本文給大家講解的是簡(jiǎn)單的使用nodejs搭建郵件發(fā)送服務(wù)的一個(gè)實(shí)例,非常的好用,有需要的小伙伴可以參考下2017-03-03WebSocket+node.js創(chuàng)建即時(shí)通信的Web聊天服務(wù)器
這篇文章主要為大家詳細(xì)介紹了WebSocket+node.js創(chuàng)建即時(shí)通信的Web聊天服務(wù)器的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-08-08輕松創(chuàng)建nodejs服務(wù)器(7):阻塞操作的實(shí)現(xiàn)
這篇文章主要介紹了輕松創(chuàng)建nodejs服務(wù)器(7):阻塞操作的實(shí)現(xiàn),本文先是組出了代碼,然后對(duì)代碼一一分析,需要的朋友可以參考下2014-12-12