使用 mysql2/promise 模塊返回以后,使用 await 返回數據總結

SELECT 返回結構

const [rows, fields] = await db.query('SELECT * FROM folders');

返回:

  • rows: 是一個數組,包含所有查到的記錄。
  • fields: 是字段的結構定義(列信息),一般不用。

rows 是一個數組,包含所有查到的記錄:

[{ id: 1, name: '一級選項1', parent_id: null },{ id: 2, name: '子目錄1', parent_id: 1 }
]

INSERT 返回結構

const [result] = await db.query('INSERT INTO folders (name, parent_id) VALUES (?, ?)', ['test', 1]);

result 是一個包含插入信息的對象:

{fieldCount: 0,      // 字段數(一般是 0,插入不返回字段)affectedRows: 1,    // 受影響的行數insertId: 17,       // 新插入的主鍵 IDserverStatus: 2,    // MySQL 服務器狀態碼warningCount: 0,    // 警告數量,0 表示無警告message: '',        // 服務器返回的信息,一般為空或插入成功消息protocol41: true,   // 與協議有關,true 表示使用 4.1 協議changedRows: 0      // 插入時恒為 0,僅在 UPDATE 時有意義
}

所以判斷成功的辦法是通過 affectedRows

if (result.affectedRows === 1) {return res.status(200).json({message: '目錄添加成功',folderId: result.insertId});
} else {return res.status(500).json({ error: '添加目錄失敗' });
}

UPDATE 返回結構:

const [result] = await db.query('UPDATE folders SET name = ? WHERE id = ?', ['newName', 17]);

result 內容:

{fieldCount: 0,affectedRows: 1,   // 匹配并執行更新的行數(包括實際沒變內容的)insertId: 0,        // 無插入則為 0serverStatus: 2,warningCount: 0,message: '(Rows matched: 1 Changed: 1 Warnings: 0)',protocol41: true,changedRows: 1     // 實際內容發生變化的行數
}

DELETE 返回結構:

const [result] = await db.query('DELETE FROM folders WHERE id = ?', [17]);

result 內容:

{fieldCount: 0,affectedRows: 1,   // 刪除成功的行數insertId: 0,serverStatus: 2,warningCount: 0,message: '',       // 有時會包含刪除說明protocol41: true,changedRows: 0     // 始終為 0,DELETE 不用這個字段
}

不能隨便“模擬”結構解構,必須清楚它的真實結構是數組 [rows, fields],否則會出錯。

? 錯誤示例:

const { affectedRows } = await db.query(...); // ? 報錯,因為它不是對象,是數組

? 正確示例:

const [result] = await db.query(...); // result 是對象
console.log(result.affectedRows);     // 訪問插入/更新結果

總結

場景返回值結構解構方式
SELECT[rows, fields][rows][rows, fields]
INSERT/UPDATE/DELETE[result, undefined][result]

由于

  • 新增 result.affectedRows === 1
  • 編輯 result.affectedRows > 0 更新語句執行了,result.changedRows > 0 內容確實有變更;
  • 刪除 result.affectedRows > 0

新增

const [result] = await db.query('INSERT INTO folders (name) VALUES (?)', ['Test']);if (result.affectedRows === 1) {console.log('插入成功,ID:', result.insertId);
} else {console.log('插入失敗');
}

編輯

const [result] = await db.query('UPDATE folders SET name = ? WHERE id = ?', ['NewName', 5]);if (result.affectedRows > 0) {console.log('更新語句執行了');if (result.changedRows > 0) {console.log('內容確實有變更');} else {console.log('字段值沒變(例如改成原來的值)');}
} else {console.log('沒有任何記錄被更新');
}

刪除

const [result] = await db.query('DELETE FROM folders WHERE id = ?', [999]);if (result.affectedRows > 0) {console.log('刪除成功');
} else {console.log('未刪除任何記錄(可能 id 不存在)');
}

最實用的判斷邏輯:

try {const [result] = await db.query(sql, values);if (result.affectedRows > 0) {// ? SQL 生效} else {// ?? SQL 沒生效(可能條件不匹配)}
} catch (err) {// ? SQL 執行失敗(語法、連接、權限等錯誤)
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/84276.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/84276.shtml
英文地址,請注明出處:http://en.pswp.cn/web/84276.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Manus Metagloves pro高精度+無漂移+低延遲 ,重構VR/XR手部交互方式

manus metagloves pro是一款專為動畫制作、虛擬現實及游戲開發打造的高精度無線動作捕捉手套。采用先進的Quantum追蹤技術,實現毫米級動作捕捉,精準還原手指細節,顯著提升創作效率與交互真實感。 MANUS Metagloves Pro解鎖動捕 / 機器人 / XR…

Uniapp插件改造指南:如何讓vue-plugin支持HarmonyOS5原生能力?

一、分層架構設計 采用通用邏輯與平臺實現分離的三層結構: uni-plugin-harmony ├── common # 跨平臺通用層 │ ├── interfaces # 能力接口抽象(如Scanner.ets) │ └── utils # 工具類 ├── harmony …

P1040 [NOIP 2003 提高組] 加分二叉樹 題解

題目描述 設一個 n n n 個節點的二叉樹 tree \text{tree} tree 的中序遍歷為 ( 1 , 2 , 3 , … , n ) (1,2,3,\ldots,n) (1,2,3,…,n),每個節點都有一個分數(均為正整數)。任一棵子樹 subtree \text{subtree} subtree(包含 tr…

【Golang面試題】Data Race 問題怎么檢測?

Go Race Detector 深度指南:原理、用法與實戰技巧 一、什么是數據競爭? 在并發編程中,數據競爭發生在兩個或多個 goroutine 同時訪問同一內存位置,且至少有一個是寫操作時。這種競爭會導致不可預測的行為和極其難以調試的問題。…

257. 二叉樹的所有路徑(js)

257. 二叉樹的所有路徑——DFS 回溯(js) 題目描述解題思路完整代碼時間復雜度分析 題目描述 257. 二叉樹的所有路徑 解題思路 題意理解 給定一棵二叉樹,要求返回所有從根節點到葉子節點的路徑,路徑以字符串形式表示&#xff0c…

自動化文檔生成工具(親測可運行)

本文介紹了一個用Java編寫的自動化文檔生成工具,通過讀取開發清單文本自動生成格式規范的Word文檔。該工具的主要特點包括: 采用Apache POI庫處理Word文檔,支持多級標題和段落自動生成實現中文數字轉換功能,將編號轉換為"一、…

湖北理元理律師事務所債務優化模型:法律與生活的平衡之道

在債務重組領域,專業機構需同時解決兩個矛盾:法律合規性與債務人可持續生存能力。湖北理元理律師事務所通過“三維干預模型”,在武漢某餐飲連鎖企業債務危機中驗證了該方案的有效性。 一、法律底層設計:還款方案的合法性審查 以該…

Web3-代幣ERC20/ERC721以及合約安全溢出和下溢的研究

Web3-代幣ERC20/ERC721以及合約安全溢出和下溢的研究 以太坊上的代幣 如果你對以太坊的世界有一些了解,你很可能聽人們聊過代幣— ERC20代幣 一個 代幣 在以太坊基本上就是一個遵循一些共同規則的智能合約——即它實現了所有其他代幣合約共享的一組標準函數&…

論文筆記 <交通燈><多智能體>MetaLight:基于價值的元強化學習用于交通信號控制

今天看的論文是這篇MetaLight:基于價值的元強化學習用于交通信號控制 里面提到的創新點就是MetaLight框架:他目標是讓交通信號控制智能體(Agent)在新路口(即使結構或流量模式不同)上能??快速學習??(Few…

華為OD-2024年E卷-尋找符合要求的最長子串[200分] -- python

問題描述: 給定一個字符串s,找出這樣一個子串: 1)該子串中的任意一個字符最多出現2次; 2)該子串不包含指定某個字符; 請你找出滿足該條件的最長子串的長度。 輸入描述 第一行為要求不包含的指定字符,為單個字符,取值范圍[0-9a-zA…

CppCon 2016 學習:What C++ Programmers Need to Know about Header <random>

隨機數生成的歷史背景 Middle-Square 方法(中位平方法): 已知最早的隨機算法之一或由修道士 Brother Edvin 在 1245 年發明由 John von Neumann 在 1949 年重新發現缺點明顯,但執行速度快 Monte Carlo 方法: 起初是…

Origin:誤差棒點線圖繪制

1.首先將你的數據復制到表格 2.選中B(y)列數據,依次點擊圖示選項 3.選中圖中紅框數據,點擊繪制點線圖即可 4.結果展示

Spring 源碼學習 1:ApplicationContext

Spring 源碼學習 1:ApplicationContext Bean 定義和 Bean 實例 AnnotationConfigApplicationContext 首先,創建一個最簡單的 Spring Boot 應用。 在入口類中接收SpringApplication.run的返回值: SpringBootApplication public class Dem…

CppCon 2017 學習:Design Patterns for Low-Level Real-Time Rendering

這段內容講的是離散顯卡(Discrete GPU)中的內存管理模型,重點是CPU和GPU各自獨立管理自己的物理內存,以及它們如何通過虛擬內存和DMA引擎實現高效通信。以下是詳細的理解和梳理: 1. 基本概念 CPU 和 GPU 是兩個獨立的…

【單調隊列】-----【原理+模版】

單調隊列 一、什么是單調隊列? 單調隊列是一種在滑動窗口或區間查詢中維護候選元素單調性的數據結構,通常用于解決“滑動窗口最大值/最小值”等問題。 核心思想是:利用雙端隊列(deque)維護當前窗口內或候選范圍內元素…

CSS語法中的選擇器與屬性詳解

CSS:層疊樣式表,Cascading Style Sheets 層疊樣式表 內容和樣式分離解耦,便于修改樣式。 特殊說明: 最后一條聲明可以沒有分號,但是為了以后修改方便,一般也加上分號為了使用樣式更加容易閱讀,可以將每條代…

模擬設計的軟件工程項目

考核題目 論文論述題:結合你 參與開發、調研或模擬設計的軟件工程項目 ,撰寫一篇論文 完成以下任務,論文題目為《面向微服務架構的軟件系統設計與建模分析》,總分: 100 分。 1. 考核內容: 一、系統論述…

個人理解redis中IO多路復用整個網絡處理流

文章目錄 1.redis網絡處理流2.理解通知機制 1.redis網絡處理流 10個客戶端通過TCP與Redis建立socket連接,發送GET name指令到服務器端。服務器端的網卡接收數據,數據進入內核態的網絡協議棧。Redis通過IO多路復用機制中的epoll向內核注冊監聽這些socket的…

【鄭州輕工業大學|數據庫】數據庫課設-酒店管理系統

該數據課設是一個基于酒店管理系統的數據庫設計 建庫語句 create database hotel_room default charset utf8 collate utf8_general_ci;建表語句 use hotel_room;-- 房型表 create table room_type( id bigint primary key auto_increment comment 房型id, name varchar(50)…

TCP 三次握手與四次揮手詳解

前言 在當今互聯網時代,前端開發的工作范疇早已超越了簡單的頁面布局和交互設計。隨著前端應用復雜度的不斷提高,對網絡性能的優化已成為前端工程師不可忽視的重要職責。而要真正理解并優化網絡性能,就需要探究支撐整個互聯網的基礎協議——…