1、操作數(shù)據(jù)庫的步驟
- 安裝操作 MySQL 數(shù)據(jù)庫的第三方模塊(mysql)
- 通過 mysql 模塊連接到 MySQL 數(shù)據(jù)庫
- 通過 mysql 模塊執(zhí)行 SQL 語句
?
2、安裝與配置 mysql 模塊
2.1、安裝 mysql 模塊
- mysql 模塊是托管于 npm 上的第三方模塊。它提供了在 Node.js 項目中連接和操作 MySQL 數(shù)據(jù)庫的能力。
- 想要在項目中使用它,需要先運行如下命令,將 mysql 安裝為項目的依賴包:
npm install mysql
2.2、配置 mysql 模塊
????????在使用 mysql 模塊操作 MySQL 數(shù)據(jù)庫之前,必須先對 mysql 模塊進行必要的配置,主要的配置步驟如下:
// 1. 導入 mysql 模塊
const mysql = require('mysql')
// 2. 建立與 MySQL 數(shù)據(jù)庫的連接關(guān)系
const db = mysql.createPool({
host: '127.0.0.1', // 數(shù)據(jù)庫的 IP 地址
user: 'root', // 登錄數(shù)據(jù)庫的賬號
password: 'cherry', // 登錄數(shù)據(jù)庫的密碼
database: 'class', // 指定要操作哪個數(shù)據(jù)庫
})
2.3、測試 mysql 模塊能否正常工作
調(diào)用 db.query() 函數(shù),指定要執(zhí)行的 SQL 語句,通過回調(diào)函數(shù)拿到執(zhí)行的結(jié)果:
// 測試 mysql 模塊能否正常工作
db.query('select 1', (err, results) => {
// mysql 模塊工作期間報錯了,就進入這個if判斷語句,打印這個錯誤信息
if(err) return console.log(err.message)
// 只要能打印出 [ RowDataPacket { '1' : 1} ]的結(jié)果,就證明數(shù)據(jù)庫連接正常
console.log(results)
})
3、使用 mysql 模塊操作 MySQL 數(shù)據(jù)庫
3.1、查詢數(shù)據(jù)
查詢 users 表中所有的數(shù)據(jù):
// 查詢 users 表中所有的數(shù)據(jù)
const sqlStr = 'select * from student'
db.query(sqlStr, (err, results) => {
// 查詢數(shù)據(jù)失敗
if (err) return console.log(err.message)
// 查詢數(shù)據(jù)成功
// 注意:如果執(zhí)行的是 select 查詢語句,則執(zhí)行的結(jié)果是數(shù)組
console.log(results)
})
3.2、插入數(shù)據(jù)
向 users 表中新增數(shù)據(jù), 其中 username 為 Spider-Man,password 為 pcc321。示例代碼如下:
// 向 users 表中,新增一條數(shù)據(jù),其中 username 的值為 Spider-Man,password 的值為 pcc123
const user = { username: 'Spider-Man', password: 'pcc123' }
// 定義待執(zhí)行的 SQL 語句,其中英文的 ? 表示占位符
const sqlStr = 'insert into users (username, password) values (?, ?)'
// 執(zhí)行 SQL 語句,使用數(shù)組的形式,依次為 ? 占位符指定具體的值
db.query(sqlStr, [user.username, user.password], (err, results) => {
// 執(zhí)行 SQL 語句失敗了
if (err) return console.log(err.message)
// 成功了
// 注意:如果執(zhí)行的是 insert into 插入語句,則 results 是一個對象
// 可以通過 affectedRows 屬性,來判斷是否插入數(shù)據(jù)成功
if (results.affectedRows === 1) {
console.log('插入數(shù)據(jù)成功!')
}
})
3.3、插入數(shù)據(jù)的便捷方式
????????向表中新增數(shù)據(jù)時,如果數(shù)據(jù)對象的每個屬性和數(shù)據(jù)表的字段一一對應,則可以通過如下方式快速插入數(shù)據(jù):
// 演示插入數(shù)據(jù)的便捷方式
const user = { username: 'Spider-Man2', password: 'pcc4321' }
// 定義待執(zhí)行的 SQL 語句
const sqlStr = 'insert into users set ?'
// 執(zhí)行 SQL 語句
db.query(sqlStr, user, (err, results) => {
if (err) return console.log(err.message) // 失敗
if (results.affectedRows === 1) {
console.log('插入數(shù)據(jù)成功') // 成功
}
})
3.4、更新數(shù)據(jù)
可以通過如下方式,更新表中的數(shù)據(jù):
// 演示如何更新用戶的信息
const user = { id: 6, username: 'aaa', password: '000' }
// 定義 SQL 語句
const sqlStr = 'update users set username=?, password=? where id=?'
// 執(zhí)行 SQL 語句
db.query(sqlStr, [user.username, user.password, user.id], (err, results) => {
if (err) return console.log(err.message)
// 注意:執(zhí)行了 update 語句之后,執(zhí)行的結(jié)果,也是一個對象,可以通過 affectedRows 判斷是否更新成功
if (results.affectedRows === 1) {
console.log('更新成功')
}
})
3.5、更新數(shù)據(jù)的便捷方式
????????更新表數(shù)據(jù)時,如果數(shù)據(jù)對象的每個屬性和數(shù)據(jù)表的字段一一對應,則可以通過如下方式快速更新表數(shù)據(jù):文章來源:http://www.zghlxwxcb.cn/news/detail-406780.html
// 演示更新數(shù)據(jù)的便捷方式
const user = { id: 6, username: 'aaaa', password: '0000' }
// 定義 SQL 語句
const sqlStr = 'update users set ? where id=?'
// 執(zhí)行 SQL 語句
db.query(sqlStr, [user, user.id], (err, results) => {
if (err) return console.log(err.message)
if (results.affectedRows === 1) {
console.log('更新數(shù)據(jù)成功')
}
})
3.6、刪除數(shù)據(jù)
在刪除數(shù)據(jù)時,推薦根據(jù) id 這樣的唯一標識,來刪除對應的數(shù)據(jù)。示例如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-406780.html
// 刪除 id 為 5 的用戶
const sqlStr = 'delete from users where id=?'
db.query(sqlStr, 5, (err, results) => {
if (err) return console.log(err.message)
// 注意:執(zhí)行 delete 語句之后,結(jié)果也是一個對象,也會包含 affectedRows 屬性
if (results.affectedRows === 1) {
console.log('刪除數(shù)據(jù)成功')
}
})
3.7、標記刪除
- 使用 DELETE 語句,會把真正的把數(shù)據(jù)從表中刪除掉。為了保險起見,推薦使用標記刪除的形式,來模擬刪除的動作。
- 所謂的標記刪除,就是在表中設(shè)置類似于 status 這樣的狀態(tài)字段,來標記當前這條數(shù)據(jù)是否被刪除。
- 當用戶執(zhí)行了刪除的動作時,我們并沒有執(zhí)行 DELETE 語句把數(shù)據(jù)刪除掉,而是執(zhí)行了 UPDATE 語句,將這條數(shù)據(jù)對應的 status 字段標記為刪除即可。
// 標記刪除:使用update 語句代替 delete 語句;只更新數(shù)據(jù)的狀態(tài),并沒有真正刪除
const sqlStr = 'update users set status=? where id=?'
db.query(sqlStr, [1, 6], (err, results) => {
if (err) return console.log(err.message)
if (results.affectedRows === 1) {
console.log('標記刪除成功')
}
})
3.8、完整示例代碼
// 1. 導入 mysql 模塊
const mysql = require('mysql')
// 2. 建立與 MySQL 數(shù)據(jù)庫的連接關(guān)系
const db = mysql.createPool({
host: '127.0.0.1', // 數(shù)據(jù)庫的 IP 地址
user: 'root', // 登錄數(shù)據(jù)庫的賬號
password: 'cherry', // 登錄數(shù)據(jù)庫的密碼
database: 'class', // 指定要操作哪個數(shù)據(jù)庫
})
/*// 測試 mysql 模塊能否正常工作
db.query('select 1', (err, results) => {
// mysql 模塊工作期間報錯了
if(err) return console.log(err.message)
// 能夠成功的執(zhí)行 SQL 語句
console.log(results)
})*/
// 查詢 users 表中所有的數(shù)據(jù)
/* const sqlStr = 'select * from student'
db.query(sqlStr, (err, results) => {
// 查詢數(shù)據(jù)失敗
if (err) return console.log(err.message)
// 查詢數(shù)據(jù)成功
// 注意:如果執(zhí)行的是 select 查詢語句,則執(zhí)行的結(jié)果是數(shù)組
console.log(results)
})*/
// 向 users 表中,新增一條數(shù)據(jù),其中 username 的值為 Spider-Man,password 的值為 pcc123
/* const user = { username: 'Spider-Man', password: 'pcc123' }
// 定義待執(zhí)行的 SQL 語句
const sqlStr = 'insert into users (username, password) values (?, ?)'
// 執(zhí)行 SQL 語句
db.query(sqlStr, [user.username, user.password], (err, results) => {
// 執(zhí)行 SQL 語句失敗了
if (err) return console.log(err.message)
// 成功了
// 注意:如果執(zhí)行的是 insert into 插入語句,則 results 是一個對象
// 可以通過 affectedRows 屬性,來判斷是否插入數(shù)據(jù)成功
if (results.affectedRows === 1) {
console.log('插入數(shù)據(jù)成功!')
}
}) */
// 演示插入數(shù)據(jù)的便捷方式
/* const user = { username: 'Spider-Man2', password: 'pcc4321' }
// 定義待執(zhí)行的 SQL 語句
const sqlStr = 'insert into users set ?'
// 執(zhí)行 SQL 語句
db.query(sqlStr, user, (err, results) => {
if (err) return console.log(err.message)
if (results.affectedRows === 1) {
console.log('插入數(shù)據(jù)成功')
}
}) */
// 演示如何更新用戶的信息
/* const user = { id: 6, username: 'aaa', password: '000' }
// 定義 SQL 語句
const sqlStr = 'update users set username=?, password=? where id=?'
// 執(zhí)行 SQL 語句
db.query(sqlStr, [user.username, user.password, user.id], (err, results) => {
if (err) return console.log(err.message)
// 注意:執(zhí)行了 update 語句之后,執(zhí)行的結(jié)果,也是一個對象,可以通過 affectedRows 判斷是否更新成功
if (results.affectedRows === 1) {
console.log('更新成功')
}
}) */
// 演示更新數(shù)據(jù)的便捷方式
/* const user = { id: 6, username: 'aaaa', password: '0000' }
// 定義 SQL 語句
const sqlStr = 'update users set ? where id=?'
// 執(zhí)行 SQL 語句
db.query(sqlStr, [user, user.id], (err, results) => {
if (err) return console.log(err.message)
if (results.affectedRows === 1) {
console.log('更新數(shù)據(jù)成功')
}
}) */
// 刪除 id 為 5 的用戶
/* const sqlStr = 'delete from users where id=?'
db.query(sqlStr, 5, (err, results) => {
if (err) return console.log(err.message)
// 注意:執(zhí)行 delete 語句之后,結(jié)果也是一個對象,也會包含 affectedRows 屬性
if (results.affectedRows === 1) {
console.log('刪除數(shù)據(jù)成功')
}
}) */
// 標記刪除
const sqlStr = 'update users set status=? where id=?'
db.query(sqlStr, [1, 6], (err, results) => {
if (err) return console.log(err.message)
if (results.affectedRows === 1) {
console.log('標記刪除成功')
}
})
到了這里,關(guān)于nodejs操作MySQL數(shù)據(jù)庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!