如何通過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
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...