node中使用mysql

在nodeJs中mysq的基礎用法

mysql基礎

增刪改查

const mysql = require('mysql')const connection = mysql.createConnection({host: 'localhost', // 數據庫的IP地址port: 3306, // 端口號user: 'root', // 登錄數據庫的賬號password: '123456', // 登錄數據庫的密碼database: 'test', // 指定要操作哪個數據庫
})// 建立連接
connection.connect()// 檢測mysql模塊能否正常工作
connection.query('select 1', (err, results) => {if (err) {return console.log(err.message)}// 只要能打印出[ RowDataPacket {'1':1} ]的結果,就證明數據庫連接正常console.log(results)
})// 查詢數據
connection.query('SELECT * FROM news', (err, result) => {// err:可能產生的錯誤// result:SQL語句的結果if (err) throw errconsole.log(result)
})// 插入數據
connection.query(`INSERT INTO news VALUES('2','標題','2020-09-09','/shutterbug.jpg','描述','內容')`, (err, result) => {if (err) throw errconsole.log(result)
})// 更新數據
connection.query('UPDATE news SET title="lucky" WHERE id=3', (err, result) => {if (err) throw errconsole.log(result)
})// 刪除數據
connection.query('DELETE FROM news WHERE id=04', (err, result) => {if (err) throw errconsole.log(result)
})

連接池技術?

數據庫的連接池負責分配、管理和釋放數據庫連接對象。它允許應用程序重復使用一個現有的數據庫的連接對象,而不是重新創建一個

const mysql = require('mysql')// 建立與MySQL數據庫的連接
var db = mysql.createPool({host: 'localhost', // 數據庫的IP地址port: 3306, // 端口號user: 'root', // 登錄數據庫的賬號password: '123456', // 登錄數據庫的密碼database: 'test', // 指定要操作哪個數據庫connectionLimit: 10 // 一次創建的最大連接數(默認值:10)
})// 查詢news表中的所有數據
const query_sql = 'select * from news'
db.query(query_sql, (err, results) => {if (err) {return console.log(err.message)}console.log(results)
})// 插入數據
// 要插入的數據對象
const add_obj = { filename: '11653277206', title: '體育' }
// 待執行的SQL語句,其中英文的?代表占位符,id雖是自增,但也要占位,不然報錯
const add_sql = 'INSERT INTO news (id,filename,title) VALUES (0,?,?)'
// 使用數組的形式,依次為?占位符指定具體的值
db.query(add_sql, [add_obj.filename, add_obj.title], (err, results) => {if (err) {return console.log(err.message)}if (results.affectedRows === 1) {console.log('插入數據成功')}
})// 插入數據的便捷方式
// 要插入的數據對象,id 為 0 會自增
const add_obj1 = { id: '0', filename: '音樂2' }
// 待執行的SQL語句,其中英文的?表示占位符
const add_sql1 = 'INSERT INTO news SET ?'
// 直接將數據對象當作占位符的值
db.query(add_sql1, add_obj1, (err, results) => {if (err) {return console.log(err.message)}if (results.affectedRows === 1) {console.log('插入數據成功')}
})// 更新數據
const edit_obj = { id: '14', filename: '形勢與政策' }
const edit_sql = 'UPDATE news SET filename=? WHERE id=?'
// 調用db.query()執行SQL語句的同時,使用數組依次為占位符指定具體的值
db.query(edit_sql, [edit_obj.filename, edit_obj.id], (err, results) => {if (err) {return console.log(err.message)}if (results.affectedRows === 1) {console.log('更新數據成功')}
})// 更新數據的便捷方式
const edit_obj1 = { id: '13', filename: '馬克思主義原理', title: 'cccc' }
const edit_sql1 = 'UPDATE news SET ? WHERE id=?'
db.query(edit_sql1, [edit_obj1, edit_obj1.id], (err, results) => {if (err) {return console.log(err.message)}if (results.affectedRows === 1) {console.log('更新數據成功')}
})// 刪除數據
const del_sql = 'DELETE FROM news WHERE id=?'
// 調用db.query()執行SQL語句的同時,為占位符指定具體的值
db.query(del_sql, '15', (err, results) => {if (err) {return console.log(err.message)}if (results.affectedRows === 1) {console.log('刪除數據成功')}
})// 標記刪除
// 所謂的標記刪除,就是在表中設置類似于status這樣的狀態字段,來標記當前這條數據是否被刪除。
const del_sql1 = 'UPDATE news SET status=? WHERE id=?'
db.query(del_sql1, [1, '6'], (err, results) => {if (err) {return console.log(err.message)}if (results.affectedRows === 1) {console.log('標記刪除成功')}
})

配合express使用

訪問express路由,執行mysql增刪改查

const express = require('express')
const mysql = require('mysql')// 創建路由對象
const router = express.Router()// 配置文件
const dbconfig = {host: 'localhost', // 數據庫的IP地址port: 3306, // 端口號user: 'root', // 登錄數據庫的賬號password: '123456', // 登錄數據庫的密碼database: 'test' // 指定要操作哪個數據庫
}// 查詢數據
router.get('/select', (req, res) => {// 連接數據庫const conn = mysql.createConnection(dbconfig)conn.query('select * from news', (err, results, fields) => {if (err) throw errconsole.log(results)res.send(results)})conn.end()
})// 插入數據
router.post('/insert', (req, res) => {const data = { id: '06', filename: '孫三', title: '60' }const conn = mysql.createConnection(dbconfig)conn.query('insert into news set ?', data, (err, results) => {if (err) throw errconsole.log(results)res.send(results)})conn.end()
})// 刪除數據
router.post('/delete', (req, res) => {const conn = mysql.createConnection(dbconfig)conn.query('delete from news where id = ?', '06', (err, results) => {if (err) throw errconsole.log(results)res.send(results)})conn.end()
})// 更新數據
router.post('/update', (req, res) => {const conn = mysql.createConnection(dbconfig)conn.query('update news set filename = ? where id = ?', ['周九', '05'], (err, results) => {if (err) throw errconsole.log(results)res.send(results)})
})module.exports = router

封裝使用

封裝連接池,路由訪問時調用

const express = require('express')
const mysql = require('mysql')
require('express-async-errors')const app = express()const router = express.Router()// 創建數據庫連接池
const pool = mysql.createPool({connectionLimit: 20,host: 'localhost', // 數據庫的IP地址port: 3306, // 端口號user: 'root', // 登錄數據庫的賬號password: 'root', // 登錄數據庫的密碼database: 'test' // 指定要操作哪個數據庫
})const query = (sql, values = '') => {return new Promise((resolve, reject) => {pool.getConnection((err, connection) => {// err 表示錯誤信息。 沒有錯誤的時候是一個空值// connection 從連接池中取出的連接對象,可以通過這個對象,去訪問數據庫if (err) {reject(err)} else {connection.query(sql, values, (err, result) => {if (err) reject(err)else resolve(result)// 將連接歸還連接池connection.release()})}})})
}router.get('/content', async (req, res) => {const data = await query(`select * from content where id=?`, [5])console.log(data)res.send(data)
})app.use('/api', router)app.listen(9000, () => {console.log('start server 9000')
})

?

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

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

相關文章

JavaScript高級程序設計(第四版)--學習記錄之迭代器與生成器(下)

生成器 生成器是 ECMAScript 6 新增的一個極為靈活的結構,擁有在一個函數塊內暫停和恢復代碼執行的能力。 生成器基礎 生成器的形式是一個函數,函數名稱前面加一個星號表示它是一個生成器。 //生成器函數聲明 function* generatorFn(){} //生成器函數表…

網站頁面源碼,前端頁面的最基本組成形式,網頁到底是什么? 網站開發教程...

演示網站:gofly.v1kf.com -----------【視頻原文案】:現在給大家介紹一下網站上的頁面到底是什么。對于我們很多的普通用戶來說,他可能不知道一個網站一個頁面到底是什么東西。我們來從最基本的開始:如果想新建一個頁面&#xff0…

vue3+ts+vite項目中使用spreadjs,通過script標簽引入spreadjs可以提高打包速度

https://demo.grapecity.com.cn/spreadjs/SpreadJSTutorial/quickstart/quickstart-js 右鍵另存這個官方的示例頁面可以下載全部js文件 https://demo.grapecity.com.cn/SpreadJS/WebDesigner/index.html spread.html: <!DOCTYPE html> <html lang"zh">…

共識機制深度解析:PoW、PoS、DPoS和PBFT

區塊鏈的世界里&#xff0c;有一個非常重要的概念叫做“共識機制”。它就像是區塊鏈的心臟&#xff0c;保證大家在這條鏈上的信息是可靠的、不可篡改的。今天&#xff0c;我們就來通俗易懂地聊聊區塊鏈里的四大共識機制&#xff1a;工作量證明&#xff08;PoW&#xff09;、權益…

數據產品經理知識庫構建

概述 數據產品經理是企業中負責管理和推動數據產品的專業人員。他們利用數據來輔助決策&#xff0c;優化產品&#xff0c;提升用戶體驗。用STAR法則&#xff08;Situation, Task, Action, Result&#xff09;來介紹數據產品經理的角色&#xff0c;應該學習的數據產品&#…

Rust-11-錯誤處理

Rust 將錯誤分為兩大類&#xff1a;可恢復的&#xff08;recoverable&#xff09;和 不可恢復的&#xff08;unrecoverable&#xff09;錯誤。對于一個可恢復的錯誤&#xff0c;比如文件未找到的錯誤&#xff0c;我們很可能只想向用戶報告問題并重試操作。不可恢復的錯誤總是 b…

Labview_網絡流

網絡流的介紹 網絡流是一種易于配置、緊密集成的動態通信方法&#xff0c;用于將數據從一個應用程序傳輸到另一個應用程序&#xff0c;其吞吐量和延遲特性可與 TCP 相媲美。但是&#xff0c;與 TCP 不同的是&#xff0c;網絡流直接支持任意數據類型的傳輸&#xff0c;而無需先…

Java虛擬機調優技巧及性能監控

Java虛擬機調優技巧及性能監控 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 引言 Java虛擬機&#xff08;JVM&#xff09;作為Java程序的核心執行環境&…

忙忙碌碌的混沌之中差點撲了個空而錯過年中這條線

文章目錄 前言初見端倪混沌初始力不從心心力交瘁拾遺補缺總結 前言 突然意識到過完這個周末已經7月份了&#xff0c;他預示著我的2024年已經過半了&#xff0c;過年回家仿佛還是昨天的事情&#xff0c;怎么轉眼間已經到了年中了。心里還是不愿承認這件事&#xff0c;翻開自己2…

cpu,緩存,輔存,主存之間的關系及特點

關系圖 示意圖&#xff1a; ------------------- | CPU | | ------------- | | | 寄存器 | | | ------------- | | | L1緩存 | | | ------------- | | | L2緩存 | | | ------------- | | | L3緩存 | | | ------------- | ----…

每日一題——Python實現PAT乙級1073 多選題常見計分法(舉一反三+思想解讀+逐步優化)9千字好文

一個認為一切根源都是“自己不夠強”的INTJ 個人主頁&#xff1a;用哲學編程-CSDN博客專欄&#xff1a;每日一題——舉一反三Python編程學習Python內置函數 Python-3.12.0文檔解讀 目錄 初次嘗試 再次嘗試 有何不同 版本一&#xff08;原始版本&#xff09;&#xff1a;…

ISO 19110全局要求類中的/req/global/binding-constraints詳細解釋

/req/global/binding-constraints 要求: 如果模型中包含對綁定實體的約束&#xff0c;則這些約束必須由一個具有字符串值的描述屬性的約束實體&#xff08;Constraints entity&#xff09;表示。綁定實體必須通過“constrainedBy”角色鏈接到這個約束實體。 具體解釋 定義 …

修復vcruntime140.dll方法分享

修復vcruntime140.dll方法分享 最近在破解typora的時候出現了缺失vcruntime140.dll文件的報錯導致軟件啟動失敗。所以找了一番資料發現都不是很方便的處理&#xff0c;甚至有的dll處理工具還需要花錢&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff0c;我本來就是為…

python實現網頁自動化(自動登錄需要驗證的網頁)

引言: python作為實現網頁自動化的一個重要工具,其強大的各種封裝的庫使得程序運行更加簡潔,只需要下載相應的庫,然后調用庫中的函數就可以簡便的實現我們想要的網頁相關操作。 正文: 我的前幾篇文章寫了關于初學爬蟲中比較容易上手的功能,例如爬取靜態網頁的數據、動…

ThreadPoolExecutor 工作線程Worker自身鎖設計

個人博客 ThreadPoolExecutor 工作線程Worker自身鎖設計 | iwts’s blog 總集 想要完整了解下ThreadPoolExecutor&#xff1f;可以參考&#xff1a; 基于源碼詳解ThreadPoolExecutor實現原理 | iwts’s blog Worker-工作線程管理 線程池設計了內部類Worker&#xff0c;主…

【python】python知名品牌調查問卷數據分析可視化(源碼+調查數據表)【獨一無二】

&#x1f449;博__主&#x1f448;&#xff1a;米碼收割機 &#x1f449;技__能&#x1f448;&#xff1a;C/Python語言 &#x1f449;公眾號&#x1f448;&#xff1a;測試開發自動化【獲取源碼商業合作】 &#x1f449;榮__譽&#x1f448;&#xff1a;阿里云博客專家博主、5…

CleanShot X - 超好用蘋果電腦截圖錄屏工具

Mac 自帶的截圖工具十分雞肋&#xff0c;不僅功能少&#xff0c;無法長截圖外&#xff0c;也不支持 GIF 制作&#xff0c;很難滿足日常做圖需求。 CleanShot X 是一款 Mac 平臺近乎無可挑剔的專業截圖錄屏工具 &#xff0c;能完美代替 Mac 自帶截圖。它提供超過 50 項功能&…

嵌入式學習——硬件(s3c2440外部中斷、定時器中斷)——day54

1. start.s preserve8area reset, code, readonlycode32entryldr pc, startnopnopnopnopnop ldr pc, interrupt_handlernopstartldr sp, 0x40001000mrs r0, cpsrbic r0, r0, #0x1Forr r0, r0, #0x12;IRQbic r0, r0, #(1 << 7);打開IRQ中斷允許msr cpsr_c, r0ldr …

【ARM CoreLink 系列 7.1 -- TZC-400 控制器 programmers model】

請閱讀【ARM CoreLink 文章專欄導讀】 文章目錄 TZC-400 programmers modelBuild configuration registerAction registerGate keeper registerSpeculation control registerInterrupt status registerTZC-400 programmers model ARM TZC-400(TrustZone地址空間控制器)是一種…

Nacos配置中心客戶端源碼分析(一): 客戶端如何初始化配置

本文收錄于專欄 Nacos 推薦閱讀&#xff1a;Nacos 架構 & 原理 文章目錄 前言一、NacosConfigBeanDefinitionRegistrar二、NacosPropertySourcePostProcessor三、AbstractNacosPropertySourceBuilder總結「AI生成」 前言 專欄前幾篇文章主要講了Nacos作為服務注冊中心相關…