如何通過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
  • 什麼是工廠模式 工廠模式是最常用的設計模式之一,屬於創建型模式。 有點: 解耦,可以把對象的創建和過程分開 減少代碼量,易於維護 什麼時候用? 當一個抽象類有多個實現的時候,需要多次實例化的時候,就要考慮使用工廠模式。 比如:登錄的抽象類ILoginBusiness,它有2個實現,一個用用戶名密碼登 ...
  • 這次iNeuOS升級主要升級圖形渲染引擎和增加豐富的圖元信息,可以很快的方案應用。總共增加41個通用和行業領域的圖元應用,增加2154個圖元信息,現在iNeuOS視圖建模功能模塊總共包括5894個行業圖元信息。現在完全支持製作高保真的工藝流程和大屏展示效果。 ...
  • 效果圖先附上: 首先 這是我是參考 教程:使用 SignalR 2 和 MVC 5 實時聊天 | Microsoft Docs 先附上教程: 在“添加新項 - SignalRChat”中,選擇 InstalledVisual> C#>WebSignalR>,然後選擇 SignalR Hub 類 (v ...
  • 一、前言 項目中之前涉及到胎兒心率圖曲線的繪製,最近項目中還需要添加心電曲線和血樣曲線的繪製功能。今天就來分享一下心電曲線的繪製方式; 二、正文 1、胎兒心率曲線的繪製是通過DrawingVisual來實現的,這裡的心電曲線我也是採用差不多相同的方式來實現的,只是兩者曲線的數據有所區別。心電圖的數據 ...
  • 安裝 Redis # 首先安裝依賴gcc, 後面需要使用make編譯redis yum install gcc -y # 進入 /usr/local/src 目錄, 把源碼下載到這裡 cd /usr/local/src # 下載 redis 7.0.2 的源碼,github被牆,可以使用國內的地址 ...
  • Redis 的定義? 百度百科: Redis(Remote Dictionary Server ),即遠程字典服務,是一個開源的使用ANSI C語言編寫、支持網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。 中文官網: Redis是一個開源(BSD許可),記憶體存 ...
  • 事情的起因是收到了一位網友的請求,他的java課設需要設計實現迷宮相關的程式——如標題概括。 我這邊不方便透露相關信息,就只把任務要求寫出來。 演示視頻指路👉: 基於JavaFX圖形界面的迷宮程式演示_嗶哩嗶哩_bilibili 完整代碼鏈接🔎: 網盤:https://pan.baidu.com ...
  • Python中的字典 Python中的字典是另一種可變容器模型,且可存儲任意類型對象。鍵值使用冒號分割,你可以看成是一串json。 常用方法 獲取字典中的值 dict[key] 如果key不存在會報錯,建議使用dict.get(key),不存在返回None 修改和新建字典值 dict[key]=va ...
  • 迎面走來了你的面試官,身穿格子衫,挺著啤酒肚,髮際線嚴重後移的中年男子。 手拿泡著枸杞的保溫杯,胳膊夾著MacBook,MacBook上還貼著公司標語:“加班使我快樂”。 面試官: 看你簡歷上用過MySQL,問你幾個簡單的問題吧。什麼是聚簇索引和非聚簇索引? 這個問題難不住我啊。來之前我看一下一燈M ...
  • tunm二進位協議在python上的實現 tunm是一種對標JSON的二進位協議, 支持JSON的所有類型的動態組合 支持的數據類型 基本支持的類型 "u8", "i8", "u16", "i16", "u32", "i32", "u64", "i64", "varint", "float", "s ...