要想在項目中操作資料庫, 首先要安裝操作 MySQL 資料庫的第三方子產品(mysql), 借助mysql 子產品連接配接到 MySQL 資料庫, 執行 SQL 語句,具體的流程如下圖所示。
安裝與配置 mysql 子產品
1. 安裝 mysql 子產品
mysql 子產品是托管于 npm 上的第三方子產品。它提供了在 Node.js 項目中連接配接和操作 MySQL 資料庫的能力。 想要在項目中使用它,需要先運作如下指令,将 mysql 安裝為項目的依賴包:
npm install mysql
2. 配置 mysql 子產品
在使用 mysql 子產品操作 MySQL 資料庫之前,必須先對 mysql 子產品進行必要的配置,主要的配置步驟如下:
// 1.導入mysq1子產品
const mysql = require('mysql')
// 2.建立與 MySQL資料庫的連接配接
const db = mysql.createPool({
host: '127.0.0.1', //資料庫的IP位址
user: 'root', //登入資料庫的賬号
password:‘admin123', //登入資料庫的密碼
database:‘my_db_01' //指定要操作哪個資料庫
})
3. 測試 mysql 子產品能否正常工作
調用 db.query() 函數,指定要執行的 SQL 語句,通過回調函數拿到執行的結果:
//檢測mysq1子產品能否正常工作
db.query('SELECT 1', (err, results) => {
if (err) return console.log(err.message)
//隻要能列印出[RowDataPacket{'1':1}]的結果,就證明資料庫連接配接正常
console.log(results)
})
使用 mysql 子產品操作 MySQL 資料庫
1. 查詢資料
查詢 users 表中所有的資料
//查詢users表中所有的使用者資料
db.query('SELECT * FROM users', (err, results) => {
//查詢失敗
if (err) return console.log(err.message)
//查詢成功
console.log(results)
})
2. 插入資料
向 users 表中新增資料, 其中 username 為 Spider-Man,password 為 pcc321。示例代碼如下:
// 1. 要插入到users表中的資料對象
const user = { username: 'Spider-Man', password: 'pcc321' }
// 2. 待執行的 SQL 語句,其中英文的? 表示占位符
const sqlStr = 'INSERT INTO users (username, password) VALUES (?, ?)'
// 3. 使用數組的形式,依次為?占位符指定具體的值
db.query(sqlStr, [user.username, user.password], (err, results) =» {
if(err)return console.log(err.message)//失敗
if(results.affectedRows=== 1) { console.log('插入資料成功') } // 成功
})
3. 插入資料的便捷方式
向表中新增資料時,如果資料對象的每個屬性和資料表的字段一一對應,則可以通過如下方式快速插入資料:
// 1. 要插入到users表中的資料對象
const (vser = { username: 'Spider-Man2', password: 'pcc4321'}
// 2. 待執行的SQL語句,其中英文的?表示占位符
const sqlStr = 'INSERT INTO users SET ?'
// 3. 直接将資料對象當作占位符的值
db.query(sqlStr, user, (err, results) => {
if(err)return console.log(err.message)//失敗
if(results.affectedRows===1){console.log('插入資料成功')}//成功
})
4. 更新資料
可以通過如下方式,更新表中的資料:
// 1.要更新的資料對象
const user = { id: 7, username: 'aaa', password: '000' }
// 2.要執行的SQL 語句
const sqlStr = 'UPDATE users SET username=?, password=? WHERE id=?'
// 3.調用db.query()執行 SQL 語句的同時,使用數組依次為占位符指定具體的值
db.query(sqlStr, [user.username, user.password, user.id], (err, results) => {
if(err)return console.log(err.message) // 失敗
if(results.affectedRows===1){console.log('更新資料成功!')}//成功
})
5. 更新資料的便捷方式
更新表資料時,如果資料對象的每個屬性和資料表的字段一一對應,則可以通過如下方式快速更新表資料:
// 1. 要更新的資料對象
const user = { id: 7, username: 'aaaa', password: '0000' }
// 2. 要執行的 SQL 語句
const sqlStr = 'UPDATE users SET ? WHERE id=?'
// 3. 調用db.query()執行 SQL 語句的同時,使用數組依次為占位符指定具體的值
db.query(sqlStr,[user,user.id],(err,results) =>{
if(err)return console.log(err.message)//失敗
if(results.affectedRows === 1) {console.log('更新資料成功!') } //成功
})
6. 删除資料
在删除資料時,推薦根據 id 這樣的唯一辨別,來删除對應的資料。示例如下:
// 1.要執行的 SQL 語句
const sqlStr = 'DELETE FROM users WHERE id=?'
// 2.調用 db.query()執行 SQL語句的同時,為占位符指定具體的值
// 注意:如果SQL語句中有多個占位符,則必須使用數組為每個占位符指定具體的值
// 如果SQL語句中隻有一個占位符,則可以省略數組
db.query(sqlStr, 7, (err, results) => {
if(err)return console.log(err.message)//失敗
if(results.affectedRows ===1){console.log('删除資料成功!‘)}//成功
})
7. 标記删除
使用 DELETE 語句,會把真正的把資料從表中删除掉。為了保險起見,推薦使用标記删除的形式,來模拟删除的動作。
所謂的标記删除,就是在表中設定類似于 status 這樣的狀态字段,來标記目前這條資料是否被删除。
當使用者執行了删除的動作時,我們并沒有執行 DELETE 語句把資料删除掉,而是執行了 UPDATE 語句,将這條資料對應的 status 字段标記為删除即可。
//标記删除:使用 UPDATE 語句替代 DELETE語句;隻更新資料的狀态,并沒有真正删除
db.query('UPDATE USERS SET status=1 WHERE id=?', 6, (err, results) =>(
if(err)return console.log(err.message)//失敗
if(results.affectedRows === 1){console.log('删除資料成功!')}//成功
})