mysql2/promise 中 execute 和 query 的使用最佳實(shí)踐
mysql2/promise 中 execute 和 query 的使用
1.executevsquery
| 方法 | 原理 | 特點(diǎn) |
|---|---|---|
db.execute() | 使用 Prepared Statement (預(yù)處理語句) | 參數(shù)嚴(yán)格類型檢查,性能穩(wěn)定,防 SQL 注入 |
db.query() | 直接拼接 SQL 發(fā)送給 MySQL 執(zhí)行 | 參數(shù)綁定更寬松,對(duì) LIMIT/OFFSET 不會(huì)類型檢查 |
2. 為什么query可以?
因?yàn)?query 方法:
- 不走 prepare + execute 兩階段過程
- 而是 一次性發(fā)送完整 SQL(即使你用
?占位符,也只是 Node.js 側(cè)簡單替換后拼接),
所以,下面代碼對(duì) query 來說是可行的:
const sql = `SELECT * FROM dictionary ${searchQuery} ORDER BY id ASC LIMIT ? OFFSET ?`;
const [results] = await db.query(sql, [...searchParams, Number(pageSize), Number(offset)]);3. 什么時(shí)候使用 query?
- 語句不需要重復(fù)執(zhí)行、對(duì)性能要求不極致時(shí),可用
query,代碼更寬容。 - 如果
LIMIT、OFFSET參數(shù)會(huì)報(bào)錯(cuò),換query可以快速解決。
4. 什么時(shí)候使用 execute?
- 當(dāng)
SQL 需要頻繁執(zhí)行(如同一個(gè)查詢反復(fù)調(diào)用),使用execute結(jié)合 Prepared Statement 可以提升性能。 - 需要嚴(yán)格防 SQL 注入時(shí),優(yōu)先
execute,但在LIMIT/OFFSET場(chǎng)景需改成拼接數(shù)字。
5. 最佳實(shí)踐
查詢數(shù)據(jù)
const sql = `SELECT * FROM table LIMIT ${Number(limit)} OFFSET ${Number(offset)}`;
const [rows] = await db.execute(sql, params);
// 或者
const [rows] = await db.query(sql, params);更新/插入
const [result] = await db.execute('INSERT INTO user(name) VALUES(?)', [name]);總結(jié)
query 在 LIMIT/OFFSET 場(chǎng)景下可直接使用,不會(huì)出現(xiàn) Incorrect arguments to mysqld\_stmt\_execute 錯(cuò)誤
如果使用 execute,LIMIT/OFFSET 需拼接數(shù)字常量
到此這篇關(guān)于mysql2/promise 中 execute 和 query 的使用最佳實(shí)踐的文章就介紹到這了,更多相關(guān)mysql execute 和 query使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL execute、executeUpdate、executeQuery三者的區(qū)別
- python中pymysql的executemany使用方式
- The MySQL server is running with the --read-only option so it cannot execute this statement
- MySQL中預(yù)處理語句prepare、execute與deallocate的使用教程
- MySQL報(bào)錯(cuò)Lost connection to MySQL server during query的解決方案
- mysql慢查詢?nèi)罩痉治龉ぞ呤褂?pt-query-digest)
- MySQL query_cache_type 參數(shù)與使用詳解
相關(guān)文章
SQL group by去重復(fù)且按照其他字段排序的操作
這篇文章主要介紹了SQL group by去重復(fù)且按照其他字段排序的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03
MySQL基于DOS命令行登錄操作實(shí)例(圖文說明)
這篇文章主要介紹了MySQL基于DOS命令行登錄操作,以圖文形式結(jié)合實(shí)例說明了MySQL登錄命令的基本用法,非常簡單易懂需要的朋友可以參考下2016-01-01
mysql myisam 優(yōu)化設(shè)置設(shè)置
mysql myisam 優(yōu)化設(shè)置設(shè)置,需要的朋友可以參考下。2010-03-03
MySQL查詢重復(fù)記錄和刪除重復(fù)記錄的操作方法
在MySQL數(shù)據(jù)庫中,有時(shí)候會(huì)出現(xiàn)重復(fù)記錄的情況,這可能會(huì)導(dǎo)致數(shù)據(jù)不準(zhǔn)確或者不符合業(yè)務(wù)需求,為了解決這個(gè)問題,我們可以使用查詢語句來找出重復(fù)記錄,并使用刪除語句來刪除這些重復(fù)記錄,本文給大家介紹了兩種操作方法,需要的朋友可以參考下2024-12-12

