如何通過node.js操作後臺資料庫

来源:https://www.cnblogs.com/liyublogs/archive/2022/04/30/16211461.html
-Advertisement-
Play Games

常用的資料庫代碼 -- 通過 * 把 users 表中所有的數據查詢出來 -- select * from users -- 從 users 表中把 username 和 password 對應的數據查詢出來 -- select username, password from users -- 向 ...



  • 常用的資料庫代碼
-- 通過 * 把 users 表中所有的數據查詢出來
-- select * from users

-- 從 users 表中把 username 和 password 對應的數據查詢出來
-- select username, password from users

-- 向 users 表中,插入新數據,username 的值為 tony stark  password 的值為 098123
-- insert into users (username, password) values ('tony stark', '098123')
-- select * from users

-- 將 id 為 4 的用戶密碼,更新成 888888
-- update users set password='888888' where id=4
-- select * from users

-- 更新 id 為 2 的用戶,把用戶密碼更新為 admin123  同時,把用戶的狀態更新為 1
-- update users set password='admin123', status=1 where id=2
-- select * from users

-- 刪除 users 表中, id 為 4 的用戶
-- delete from users where id=4
-- select * from users

-- 演示 where 子句的使用
-- select * from users where status=1
-- select * from users where id>=2
-- select * from users where username<>'ls'
-- select * from users where username!='ls'

-- 使用 AND 來顯示所有狀態為0且id小於3的用戶
-- select * from users where status=0 and id<3

-- 使用 or 來顯示所有狀態為1 或 username 為 zs 的用戶
-- select * from users where status=1 or username='zs'

-- 對users表中的數據,按照 status 欄位進行升序排序
-- select * from users order by status

-- 按照 id 對結果進行降序的排序  desc 表示降序排序   asc 表示升序排序(預設情況下,就是升序排序的)
-- select * from users order by id desc

-- 對 users 表中的數據,先按照 status 進行降序排序,再按照 username 字母的順序,進行升序的排序
-- select * from users order by status desc, username asc

-- 使用 count(*) 來統計 users 表中,狀態為 0 用戶的總數量
-- select count(*) from users where status=0

-- 使用 AS 關鍵字給列起別名
-- select count(*) as total from users where status=0
-- select username as uname, password as upwd from users

實際開發中庫、表、行、欄位的關係

  1. 在實際項目開發中,一般情況下,每個項目都對應獨立的資料庫。
  2. 不同的數據,要存儲到資料庫的不同表中,例如:用戶數據存儲到 users 表中,圖書數據存儲到 books 表中。
  3. 每個表中具體存儲哪些信息,由欄位來決定,例如:我們可以為 users 表設計 id、username、password 這 3 個
    欄位。
  4. 表中的行,代表每一條具體的數據。

欄位的特殊標識

  1. PK(Primary Key)主鍵、唯一標識
  2. NN(Not Null)值不允許為空
  3. UQ(Unique)值唯一
  4. AI(Auto Increment)值自動增長

在項目中使用Mysql資料庫

在項目中操作資料庫的步驟

  1. 安裝操作 MySQL 資料庫的第三方模塊(mysql)
  2. 通過 mysql 模塊連接到 MySQL 資料庫
  3. 通過 mysql 模塊執行 SQL 語句

安裝mysql模塊

mysql 模塊是托管於 npm 上的第三方模塊。它提供了在 Node.js 項目中連接和操作 MySQL 資料庫的能力。想要在項目中使用它,需要先運行如下命令,將 mysql 安裝為項目的依賴包:

npm install mysql

配置mysql模塊

在使用 mysql 模塊操作 MySQL 資料庫之前,必須先對 mysql 模塊進行必要的配置,主要的配置步驟如下:

測試mysql模塊是否可以正常工作

調用 db.query() 函數,指定要執行的 SQL 語句,通過回調函數拿到執行的結果:

const mysql = require('mysql')

const db = mysql.createPool({
  host: '127.0.0.1',
  user: 'root',
  password: 'root',
  database: 'bookman',
})

//檢查mysql模塊是否正常使用
db.query('SELECT 1', (err, results) => {
  if (err) return console.log(err.message);
  //只要可以輸出[ RowDataPacket { '1': 1 } ]的結果,就證明資料庫鏈接沒問題。
  console.log(results);
})

查詢語句

查詢表中數據示例:

const mysql = require('mysql')

const db = mysql.createPool({
  host: '127.0.0.1',
  user: 'root',
  password: 'root',
  database: 'bookman',
})


db.query('SELECT * FROM tb_book', (err, results) => {
  //查詢失敗
  if (err) return console.log(err.message);
  //查詢成功
  //如果執行的是select查詢語句,則返回的是數組
  console.log(results);
})

插入數據

向表中插入數據,示例代碼如下。

  • 便捷方式
//插入數據 簡化形式
const user = { username: 'liyu2', password: '49023dfs!2' }
//待執行的sql語句
const sqlStr = 'INSERT INTO tb_user SET ?'
//使用數組的形式,依次為?占位符指定具體的值。
db.query(sqlStr, user, (err, results) => {
  //失敗了
  if (err) return console.log(err.message);
  //成功了
  if (results.affectedRows) {
    console.log('插入數據成功');
  }
})

註意:
這種方法適合插入多項屬性時使用
db.query里的第二個值一定是對象,如果是多個值,就用中括弧包含
如果執行的是insert into語句,則result是一個對象
可以通過affectedRows屬性,來判斷是否插入成功

  • 初始形式
//插入數據 
const list = { username: 'liyu3', password: '23123' }
//待執行的sql語句
const sqlstr = 'INSERT INTO tb_user SET ?'
//使用數組的形式,依次為?占位符指定具體的值。
db.query(sqlstr, [list.username, list.password], (err, results) => {
  //失敗了
  if (err) return console.log(err.message);
  //成功了
  //註意:如果執行的是insert into語句,則result是一個對象
  //可以通過affectedRows屬性,來判斷是否插入成功
  if (results.affectedRows) {
    console.log('插入數據成功');
  }
})

更新數據

可以通過如下方式,更新表中的數據:

//需要更新的數據
const update = { username: 'liyu', password: '3343' }
//要執行的SQL語句
const updateSql = 'UPDATE tb_user SET password=? WHERE username = ?'
//3.調用db.query()執行 SQL 語句的同時,依次為占位符指定具體的值
db.query(updateSql, [update.password, update.username], (err, results) => {
  if (err) return console.log(err.message);
  if (results.affectedRows) { console.log('更新狀態成功'); }
})

註意:
執行了update後,返回的也是一個對象,可以通過.affectedRows來判斷是否成功

  • 便捷方式
const update2 = { username: 'liyu2', password: '111' }
const updateSql1 = 'UPDATE tb_user SET ? WHERE username=?'
db.query(updateSql1, [update2, update2.username], (err, results) => {
  if (err) return console.log(err.message);
  if (results.affectedRows) { console.log('更新成功'); }
})

註意:
在是使用便捷方式開發代碼時需要註意,db.query里的第二參數里,第一個值一定是對象。

刪除數據

在刪除數據時,推薦根據 id 這樣的唯一標識,來刪除對應的數據。示例如下:

const sqlStr = 'delete from tb_user where username = ?'
db.query(sqlStr, 'liyu2', (err, results) => {
  if (err) return console.log(err.message);
  if (results.affectedRows) {
    console.log('刪除成功');
  }
})

註意:
調用db.query()執行SQL語句時,為占位符指定具體的值
如果SQL里有多個占位符,則必須使用數組為每個占位符指定具體的值
如果SQL里只有一個占位符,則可以省略數組

標記刪除

使用 DELETE 語句,會把真正的把數據從表中刪除掉。為了保險起見,推薦使用標記刪除的形式,來模擬刪除的動作。
所謂的標記刪除,就是在表中設置類似於 status 這樣的狀態欄位,來標記當前這條數據是否被刪除。
當用戶執行了刪除的動作時,我們並沒有執行 DELETE 語句把數據刪除掉,而是執行了 UPDATE 語句,將這條數據對應
的 status 欄位標記為刪除即可。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一 什麼是介面 介面是指定一組函數成員而不實現它們的引用類型。 class Program { static void FlyFunc(IFly obj) { obj.Fly(); } static void Main(string[] args) { var bird = new Bird(); ...
  • 最近使用STM32CubeIDE來進行編程,現對其軟體架構及功能進行學習和總結,也希望後來的小伙伴能夠更快的上手這款軟體! STM32CubeIDE官方介紹 STM32CubeIDE(Integrated development environment for STM32 products) 特征: ...
  • CentOS7 根分區擴容 [詳細過程] 前提 1.如果原來的系統根分區為邏輯捲分區 則可以使用如下的方法 如果不是則不可以 2.如果原來的系統根分區不是邏輯捲分區 則不可以擴展只能再添加掛在磁碟進行相應目錄的擴容 添加磁碟 [此處添加一塊2G的硬碟] 1.先添加一塊磁碟 然後在系統中查看是否可以正 ...
  • STM8S103F3 產品手冊, 接線 ST-LINK和開發板的SWIM口是一一對應的, 直接連到開發板的同名PIN, 開發工具庫 SPL 第三方維護的 STM8S103F3_SPL 創建項目 打開 STVD 工具鏈: 選擇STM8 Cosmic, 指定toolchains到對應的目錄, 選擇晶元型... ...
  • linux套接字編程示例 簡單TCP、UDP編程示例。 TCP TCP通信模型 伺服器代碼 #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <errno.h> #include <stdi ...
  • SAS (Statistical Analysis System) 是一個統計軟體系統,由 SAS Institute 開發, 用於數據管理、高級分析、多元分析、商業智能、刑事調查和預測分析. SAS 由北卡羅來納州立大學在1966至1976年之間開發, 並於1976年成立了SAS軟體研究所. 19... ...
  • HDFS HDFS由大量伺服器組成存儲集群,將數據進行分片與副本,實現高容錯。 而分片最小的單位就是塊。預設塊的大小是64M。 HDFS Cli操作 官網https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/F ...
  • 一、Spark on Hive 和 Hive on Spark的區別 1)Spark on Hive Spark on Hive 是Hive只作為存儲角色,Spark負責sql解析優化,執行。這裡可以理解為Spark 通過Spark SQL 使用Hive 語句操作Hive表 ,底層運行的還是 Spa ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...