Connector/Node.js 是官方的node.js連接mysql的驅(qū)動(dòng),用于MySQL 5.7.12+ 以上數(shù)據(jù)庫(kù)。在NodeJS開發(fā)中我們經(jīng)常涉及到操作數(shù)據(jù)庫(kù),尤其是 MySQL,這是nodejs mysql 連接池。Nodejs要連接MySQL,可以使用Nodejs的MysQL驅(qū)動(dòng)來實(shí)現(xiàn)。
mysql官方出品!
Installation
This library is organized in a way that it can be installed into your project using Node.js's npm tool. Choose one of the following methods to get and install MySQL Connector/node.js:
manually download the package from https://dev.mysql.com/downloads/connector/nodejs/ and import the library using npm:
$ npm install mysql-connector-nodejs-8.0.8.tar.gz`
use the @mysql/xdevapi package from https://npmjs.com and install it:
$ npm install @mysql/xdevapi
Please refer to https://npmjs.com for more information on npm.
Node.js中JavaScript操作MySQL方法
一、建立數(shù)據(jù)庫(kù)連接:createConnection(Object)方法
該方法接受一個(gè)對(duì)象作為參數(shù),該對(duì)象有四個(gè)常用的屬性host,user,password,database。與php中鏈接數(shù)據(jù)庫(kù)的參數(shù)相同。屬性列表如下:
host: 連接數(shù)據(jù)庫(kù)所在的主機(jī)名. (默認(rèn): localhost)
port: 連接端口. (默認(rèn): 3306)
localAddress: 用于TCP連接的IP地址. (可選)
socketPath: 鏈接到unix域的路徑。在使用host和port時(shí)該參數(shù)會(huì)被忽略.
user: MySQL用戶的用戶名.
password: MySQL用戶的密碼.
database: 鏈接到的數(shù)據(jù)庫(kù)名稱 (可選).
charset: 連接的字符集. (默認(rèn): 'UTF8_GENERAL_CI'.設(shè)置該值要使用大寫!)
timezone: 儲(chǔ)存本地時(shí)間的時(shí)區(qū). (默認(rèn): 'local')
stringifyObjects: 是否序列化對(duì)象. See issue #501. (默認(rèn): 'false')
insecureAuth: 是否允許舊的身份驗(yàn)證方法連接到數(shù)據(jù)庫(kù)實(shí)例. (默認(rèn): false)
typeCast: 確定是否講column值轉(zhuǎn)換為本地JavaScript類型列值. (默認(rèn): true)
queryFormat: 自定義的查詢語(yǔ)句格式化函數(shù).
supportBigNumbers: 數(shù)據(jù)庫(kù)處理大數(shù)字(長(zhǎng)整型和含小數(shù)),時(shí)應(yīng)該啟用 (默認(rèn): false).
bigNumberStrings: 啟用 supportBigNumbers和bigNumberStrings 并強(qiáng)制這些數(shù)字以字符串的方式返回(默認(rèn): false).
dateStrings: 強(qiáng)制日期類型(TIMESTAMP, DATETIME, DATE)以字符串返回,而不是一javascript Date對(duì)象返回. (默認(rèn): false)
debug: 是否開啟調(diào)試. (默認(rèn): false)
multipleStatements: 是否允許在一個(gè)query中傳遞多個(gè)查詢語(yǔ)句. (Default: false)
flags: 鏈接標(biāo)志.
還可以使用字符串連接數(shù)據(jù)庫(kù)例如:
復(fù)制代碼 代碼如下:
var connection = mysql.createConnection('mysql://user:pass@host/db?debug=true&charset=BIG5_CHINESE_CI&timezone=-0700');
二、結(jié)束數(shù)據(jù)庫(kù)連接end()和destroy()
end()接受一個(gè)回調(diào)函數(shù),并且會(huì)在query結(jié)束之后才觸發(fā),如果query出錯(cuò),仍然會(huì)終止鏈接,錯(cuò)誤會(huì)傳遞到回調(diào)函數(shù)中處理。
destroy()立即終止數(shù)據(jù)庫(kù)連接,即使還有query沒有完成,之后的回調(diào)函數(shù)也不會(huì)在觸發(fā)。
三、創(chuàng)建連接池 createPool(Object)
Object和createConnection參數(shù)相同。
可以監(jiān)聽connection事件,并設(shè)置session值
pool.on('connection', function(connection) {
connection.query('SET SESSION auto_increment_increment=1')
});
connection.release()釋放鏈接到連接池。如果需要關(guān)閉連接并且刪除,需要使用connection.destroy()
pool除了接受和connection相同的參數(shù)外,還接受幾個(gè)擴(kuò)展的參數(shù)
createConnection: 用于創(chuàng)建鏈接的函數(shù). (Default: mysql.createConnection)
waitForConnections: 決定當(dāng)沒有連接池或者鏈接數(shù)打到最大值時(shí)pool的行為. 為true時(shí)鏈接會(huì)被放入隊(duì)列中在可用是調(diào)用,為false時(shí)會(huì)立即返回error. (Default: true)
connectionLimit: 最大連接數(shù). (Default: 10)
queueLimit: 連接池中連接請(qǐng)求的烈的最大長(zhǎng)度,超過這個(gè)長(zhǎng)度就會(huì)報(bào)錯(cuò),值為0時(shí)沒有限制. (Default: 0)