- [mysql - mysql中文文檔翻譯 - Breword 文檔集合]:(https://www.breword.com/mysqljs-mysql)
一、準(zhǔn)備工作
安裝依賴包:
npm i mysql -s
- [mysql - npm]:(https://www.npmjs.com/package/mysql)
二、連接數(shù)據(jù)庫
const mysql = require("mysql");
const db_config={
host:"localhost",
user:"root",
password:"root",
port:"3306",
database:"mydb"
}
let conn = mysql.createConnection(db_config);
// 連接數(shù)據(jù)庫
conn.connect(err => {
if(err) {
throw err
} else{
console.log("連接成功!");
}
})
// 查詢數(shù)據(jù)庫
conn.query("select * from user", (err, res) => {
if(err){
throw err
}else{
console.log(res);
closeMysql(conn);
}
});
// 關(guān)閉數(shù)據(jù)庫
let closeMysql = conn => {
conn.end(err => {
if(err){
throw err
}else{
console.log('關(guān)閉成功!');
}
});
}
運行中若遇到如下報錯,請檢查輸入信息是否正確(host、port、user、password 等),jdbc配置中拿到的相關(guān)信息尤其是密碼很可能是加密后的
Error: ER_ACCESS_DENIED_ERROR: Access denied for user ‘root‘@‘localhost‘ (using password: YES)
node - MySQL 數(shù)據(jù)庫連接配置項:
- host:主機地址 (默認(rèn):localhost)
- user:用戶名
- password:密碼
- port:端口號 (默認(rèn):3306)
- database:數(shù)據(jù)庫名
- charset:連接字符集(默認(rèn):‘UTF8_GENERAL_CI’,注意字符集的字母都要大寫)
- localAddress:此IP用于TCP連接(可選)
- socketPath:連接到unix域路徑,當(dāng)使用 host 和port 時會被忽略
- timezone:時區(qū)(默認(rèn):‘local’)
- connectTimeout:連接超時(默認(rèn):不限制;單位:毫秒)
- stringifyObjects:是否序列化對象(默認(rèn):‘false’ ;與安全相關(guān))
- typeCast:是否將列值轉(zhuǎn)化為本地JavaScript類型值 (默認(rèn):true)
- queryFormat:自定義query語句格式化方法
- supportBigNumbers:數(shù)據(jù)庫支持bigint或decimal類型列時,需要設(shè)此option為true (默認(rèn):false)
- bigNumberStrings:supportBigNumbers和bigNumberStrings啟用 強制bigint或decimal列以JavaScript字符串類型返回(默認(rèn):false)
- dateStrings:強制timestamp,datetime,data類型以字符串類型返回,而不是JavaScriptDate類型(默認(rèn):false)
- debug:開啟調(diào)試(默認(rèn):false)
- multipleStatements:是否許一個query中有多個MySQL語句 (默認(rèn):false)
- flags:用于修改連接標(biāo)志
- ssl:使用ssl參數(shù)(與 crypto.createCredenitals 參數(shù)格式一至)或一個包含ssl配置文件名稱的字符串,目前只捆綁 Amazon RDS 的配置文件
歡迎關(guān)注【程序邊界】
三、數(shù)據(jù)池保持連接 & 公共方法封裝
數(shù)據(jù)庫連接池 pool 可以有效避免頻繁連接、斷開導(dǎo)致的資源消耗
1.封裝
const mysql = require('mysql')
const db_config = {
host:"localhost",
user:"root",
password:"root",
port:"3306",
database:"mydb"
}
let sqlConnTemp = (sql, params) => {
return new Promise((resolve, reject) => {
let conn = mysql.createConnection(db_config)
let closeMysql = conn => conn.end(err => if(err) throw err )
conn.connect((err, conn) => {
err ? reject(err) : conn.query(sql, params, (err, data, fields) => {
err ? reject(err) : resolve(data)
})
closeMysql(conn);
})
})
}
let sqlConn = (sql, params) => {
return new Promise((resolve, reject) => {
// 連接池(保持連接)
const pool = mysql.createPool(db_config)
pool.getConnection((err, conn)=>{
err ? reject(err) : conn.query(sql, params, (err, data, fields) => {
err ? reject(err) : resolve(data)
})
conn.release() // 僅釋放未關(guān)閉
// pool.end() // 關(guān)閉連接
})
})
}
module.exports = { sqlConn,sqlConnTemp }
2.調(diào)用
const { sqlConn }= require('./mysql')
sqlConn('select * from user_table where age = ? and sex = ?',[21, 1]).then((data) => {
console.log(data)
res.send(data)
}).catch((err) => {
console.error(err)
res.send(err)
})
若是擔(dān)心網(wǎng)絡(luò)問題造成連接失敗,可以在連接reject部分添加定時并回調(diào)連接
未完待續(xù)。。。歡迎留言一起學(xué)習(xí)探討
拓展閱讀:
- [數(shù)據(jù)庫連接池、sequelize實現(xiàn)增刪改查等操作]:(https://blog.csdn.net/TangJing_/article/details/121602581)
四、拓展學(xué)習(xí)
1.mysql 命令行
(1)查看當(dāng)前所有數(shù)據(jù)庫:
show database;
(2)使用指定數(shù)據(jù)庫:
use DBName;
(3)查看當(dāng)前庫的所有表:
show tables;
(4)查看其它庫的所有表:
show tables from DBName;
(5)創(chuàng)建表:
create table tableName (
colName dataType;
colName dataType;
...
);
(6)查看表結(jié)構(gòu)
desc tableName;
(7)查看當(dāng)前版本
- 如果沒有連接到了 mysql 服務(wù),可以輸入以下命令:
# mysql Ver 8.0.32 for Win64 on x86_64 (MySQL Community Server - GPL)
mysql -V
# 用賬號 ODBC,連接上MySQL服務(wù)器,默認(rèn)連接到localhost上的3306端口。
mysql -v
# 僅限 windows 系統(tǒng)(`|`管道符;find命令查找字符串;注意引號)
mysql --help | find "Ver"
# 僅限 linux系統(tǒng)(`|`管道符;grep命令查找字符串)
mysql --help | grep Ver
權(quán)限有問題會報錯:
ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)
- 如果已經(jīng)連接到了 mysql 服務(wù),可以輸入以下命令:
select version();
或:
status;
或:
\s
2.語法規(guī)范
- 不區(qū)分大小寫,但是建議關(guān)鍵字大寫,表名、列名小寫
- 每條命令分號結(jié)尾
- 每條命令根據(jù)需要,可以進(jìn)行縮進(jìn),或換行
- 注釋
- (1)單行注釋:#注釋文字
- (2)單行注釋:–[空格]注釋文字
- (3)多行注釋:/* 注釋文字
3.mysql 其他
(1)查看自己數(shù)據(jù)庫文件所在的位置
-
在mysql文件夾找到 my.ini 文件
-
使用記事本打開:
-
Ctrl+F,搜索
datadir
: -
如果上面的方式你掌握了,下面來一個終極大招:
show global variables like "%datadir%";
登入后,一行命令直接查出:
數(shù)據(jù)庫整體搬遷直接遷移目錄即可文章來源:http://www.zghlxwxcb.cn/news/detail-691495.html
my.ini
[mysqld]
# 設(shè)置3306端口
port=3306
# 設(shè)置mysql的安裝目錄
basedir=D:\\Program Files\mysql-8.0.19-winx64
# 設(shè)置mysql數(shù)據(jù)庫的數(shù)據(jù)的存放目錄
datadir=D:\\Program Files\mysql-8.0.19-winx64\Data
# 允許最大連接數(shù)
max_connections=200
# 允許連接失敗的次數(shù)(防止有人攻擊數(shù)據(jù)庫系統(tǒng))
max_connect_errors=10
# 服務(wù)端使用的字符集默認(rèn)為UTF8
character-set-server=utf8
# 創(chuàng)建新表時將使用的默認(rèn)存儲引擎
default-storage-engine=INNODB
# 默認(rèn)使用“mysql_native_password”插件認(rèn)證
default_authentication_plugin=mysql_native_password
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
[mysql]
# 設(shè)置mysql客戶端默認(rèn)字符集
default-character-set=utf8
[client]
# 設(shè)置mysql客戶端連接服務(wù)端時默認(rèn)使用的端口
port=3306
default-character-set=utf8
轉(zhuǎn)載請留言文章來源地址http://www.zghlxwxcb.cn/news/detail-691495.html
到了這里,關(guān)于【實戰(zhàn)】nodejs 必會技能 —— 封裝 mysql 數(shù)據(jù)庫連接的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!