首頁技術(shù)文章正文

怎樣在前端項(xiàng)目中使用MySQL模塊操作數(shù)據(jù)庫?

更新時(shí)間:2023-05-04 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

要想在項(xiàng)目中操作數(shù)據(jù)庫, 首先要安裝操作 MySQL 數(shù)據(jù)庫的第三方模塊(mysql), 借助mysql 模塊連接到 MySQL 數(shù)據(jù)庫, 執(zhí)行 SQL 語句,具體的流程如下圖所示。

在項(xiàng)目中操作數(shù)據(jù)庫步驟

安裝與配置 mysql 模塊

1. 安裝 mysql 模塊

mysql 模塊是托管于 npm 上的第三方模塊。它提供了在 Node.js 項(xiàng)目中連接和操作 MySQL 數(shù)據(jù)庫的能力。 想要在項(xiàng)目中使用它,需要先運(yùn)行如下命令,將 mysql 安裝為項(xiàng)目的依賴包:

npm install mysql

2. 配置 mysql 模塊

在使用 mysql 模塊操作 MySQL 數(shù)據(jù)庫之前,必須先對 mysql 模塊進(jìn)行必要的配置,主要的配置步驟如下:

// 1.導(dǎo)入mysq1模塊
const mysql = require('mysql')
// 2.建立與 MySQL數(shù)據(jù)庫的連接
const db = mysql.createPool({
  host: '127.0.0.1',      //數(shù)據(jù)庫的IP地址
  user: 'root',           //登錄數(shù)據(jù)庫的賬號
  password:‘a(chǎn)dmin123',  //登錄數(shù)據(jù)庫的密碼
  database:‘my_db_01'    //指定要操作哪個(gè)數(shù)據(jù)庫
})

3. 測試 mysql 模塊能否正常工作

調(diào)用 db.query() 函數(shù),指定要執(zhí)行的 SQL 語句,通過回調(diào)函數(shù)拿到執(zhí)行的結(jié)果:

//檢測mysq1模塊能否正常工作
db.query('SELECT 1', (err, results) => {
   if (err) return console.log(err.message)
   //只要能打印出[RowDataPacket{'1':1}]的結(jié)果,就證明數(shù)據(jù)庫連接正常
   console.log(results)
})

使用 mysql 模塊操作 MySQL 數(shù)據(jù)庫

1. 查詢數(shù)據(jù)

查詢 users 表中所有的數(shù)據(jù)

//查詢users表中所有的用戶數(shù)據(jù)
db.query('SELECT * FROM users', (err, results) => {
    //查詢失敗
    if (err) return console.log(err.message)
    //查詢成功
    console.log(results)
})

2. 插入數(shù)據(jù)

向 users 表中新增數(shù)據(jù), 其中 username 為 Spider-Man,password 為 pcc321。示例代碼如下:

// 1. 要插入到users表中的數(shù)據(jù)對象
const user = { username: 'Spider-Man', password: 'pcc321' }
// 2. 待執(zhí)行的 SQL 語句,其中英文的? 表示占位符
const sqlStr = 'INSERT INTO users (username, password) VALUES (?, ?)'
// 3. 使用數(shù)組的形式,依次為?占位符指定具體的值
db.query(sqlStr, [user.username, user.password], (err, results) =? {
   if(err)return console.log(err.message)//失敗
   if(results.affectedRows=== 1) { console.log('插入數(shù)據(jù)成功') } // 成功
})

3. 插入數(shù)據(jù)的便捷方式

向表中新增數(shù)據(jù)時(shí),如果數(shù)據(jù)對象的每個(gè)屬性和數(shù)據(jù)表的字段一一對應(yīng),則可以通過如下方式快速插入數(shù)據(jù):

// 1. 要插入到users表中的數(shù)據(jù)對象
const (vser = { username: 'Spider-Man2', password: 'pcc4321'}
// 2. 待執(zhí)行的SQL語句,其中英文的?表示占位符
const sqlStr = 'INSERT INTO users SET ?'
// 3. 直接將數(shù)據(jù)對象當(dāng)作占位符的值
db.query(sqlStr, user, (err, results) => {
   if(err)return console.log(err.message)//失敗
   if(results.affectedRows===1){console.log('插入數(shù)據(jù)成功')}//成功
})

4. 更新數(shù)據(jù)

可以通過如下方式,更新表中的數(shù)據(jù):

// 1.要更新的數(shù)據(jù)對象
const user = { id: 7, username: 'aaa', password: '000' }
// 2.要執(zhí)行的SQL 語句
const sqlStr = 'UPDATE users SET username=?, password=? WHERE id=?'
// 3.調(diào)用db.query()執(zhí)行 SQL 語句的同時(shí),使用數(shù)組依次為占位符指定具體的值
db.query(sqlStr, [user.username, user.password, user.id], (err, results) => {
   if(err)return console.log(err.message) // 失敗
   if(results.affectedRows===1){console.log('更新數(shù)據(jù)成功!')}//成功
})

5. 更新數(shù)據(jù)的便捷方式

更新表數(shù)據(jù)時(shí),如果數(shù)據(jù)對象的每個(gè)屬性和數(shù)據(jù)表的字段一一對應(yīng),則可以通過如下方式快速更新表數(shù)據(jù):

// 1. 要更新的數(shù)據(jù)對象
const user = { id: 7, username: 'aaaa', password: '0000' }
// 2. 要執(zhí)行的 SQL 語句
const sqlStr = 'UPDATE users SET ? WHERE id=?'
// 3. 調(diào)用db.query()執(zhí)行 SQL 語句的同時(shí),使用數(shù)組依次為占位符指定具體的值
db.query(sqlStr,[user,user.id],(err,results) =>{
   if(err)return console.log(err.message)//失敗
   if(results.affectedRows === 1) {console.log('更新數(shù)據(jù)成功!') } //成功
})

6. 刪除數(shù)據(jù)

在刪除數(shù)據(jù)時(shí),推薦根據(jù) id 這樣的唯一標(biāo)識,來刪除對應(yīng)的數(shù)據(jù)。示例如下:

// 1.要執(zhí)行的 SQL 語句
const sqlStr = 'DELETE FROM users WHERE id=?'
// 2.調(diào)用 db.query()執(zhí)行 SQL語句的同時(shí),為占位符指定具體的值
// 注意:如果SQL語句中有多個(gè)占位符,則必須使用數(shù)組為每個(gè)占位符指定具體的值
//        如果SQL語句中只有一個(gè)占位符,則可以省略數(shù)組
db.query(sqlStr, 7, (err, results) => {
   if(err)return console.log(err.message)//失敗
   if(results.affectedRows ===1){console.log('刪除數(shù)據(jù)成功!‘)}//成功
})

7. 標(biāo)記刪除

使用 DELETE 語句,會把真正的把數(shù)據(jù)從表中刪除掉。為了保險(xiǎn)起見,推薦使用標(biāo)記刪除的形式,來模擬刪除的動作。

所謂的標(biāo)記刪除,就是在表中設(shè)置類似于 status 這樣的狀態(tài)字段,來標(biāo)記當(dāng)前這條數(shù)據(jù)是否被刪除。

當(dāng)用戶執(zhí)行了刪除的動作時(shí),我們并沒有執(zhí)行 DELETE 語句把數(shù)據(jù)刪除掉,而是執(zhí)行了 UPDATE 語句,將這條數(shù)據(jù)對應(yīng)的 status 字段標(biāo)記為刪除即可。

//標(biāo)記刪除:使用 UPDATE 語句替代 DELETE語句;只更新數(shù)據(jù)的狀態(tài),并沒有真正刪除
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('刪除數(shù)據(jù)成功!')}//成功
})


分享到:
在線咨詢 我要報(bào)名
和我們在線交談!