一、mysql庫(kù)
文檔:https://github.com/mysqljs/mysql
mysql有三種創(chuàng)建連接方式
1.createConnection
使用時(shí)需要對(duì)連接的創(chuàng)建、斷開(kāi)進(jìn)行管理
2.createPool
創(chuàng)建資源池,使用時(shí)不需要對(duì)連接的創(chuàng)建、斷開(kāi)進(jìn)行管理,每次使用完調(diào)用一次release進(jìn)行釋放連接到資源池,至于連接是否斷開(kāi)交給資源池去管理。每次建立連接時(shí)非常消耗資源的,影響性能,因此對(duì)連接創(chuàng)建合理的管理,有利于提高性能。
3.createPoolCluster
創(chuàng)建連接池集群,允許與多個(gè)host連接
二、sequelize庫(kù)
中文文檔:https://github.com/demopark/sequelize-docs-Zh-CN
此庫(kù)依賴mysql2
與mysql庫(kù)相比,不需要寫(xiě)sql語(yǔ)句,增刪查改都封裝成對(duì)應(yīng)的方法。
mysql庫(kù)入門(mén)比較簡(jiǎn)單,有利于學(xué)習(xí)sql語(yǔ)句
sequelize封裝了一些簡(jiǎn)單sql語(yǔ)句,掌握封裝的方法及對(duì)應(yīng)的參數(shù)即可,但學(xué)習(xí)成本稍微高一些,需要?jiǎng)?chuàng)建模式,模式需要與數(shù)據(jù)庫(kù)中的表對(duì)應(yīng)起來(lái)。在項(xiàng)目實(shí)際開(kāi)發(fā)過(guò)程中,使用sequelize開(kāi)發(fā)效率更高,代碼可以更加簡(jiǎn)短。也有query方法,支持使用sql語(yǔ)句。
sequelize提供了一個(gè)方法sequelize.sync({ force: true });強(qiáng)制數(shù)據(jù)庫(kù)中的表與模式定義的表進(jìn)行同步,如果數(shù)據(jù)庫(kù)中存在與模式定義同名的表,此表會(huì)被刪除,重新定義。如果數(shù)據(jù)庫(kù)中存在模式未定義的表,不會(huì)對(duì)其進(jìn)行操作。
也可以對(duì)單個(gè)模式設(shè)置強(qiáng)制同步
如:
// 注意:如果表已經(jīng)存在,使用`force:true`將刪除該表
User.sync({ force: true }).then(() => {
// 現(xiàn)在數(shù)據(jù)庫(kù)中的 `users` 表對(duì)應(yīng)于模型定義
return User.create({
firstName: 'John',
lastName: 'Hancock'
});
});
強(qiáng)制同步也有風(fēng)險(xiǎn)點(diǎn):
1.適合在項(xiàng)目初始化,需要?jiǎng)?chuàng)建數(shù)據(jù)表的時(shí)候使用
2.如果數(shù)據(jù)庫(kù)中已有部分?jǐn)?shù)據(jù),當(dāng)服務(wù)重啟時(shí),數(shù)據(jù)庫(kù)中模式定義的表會(huì)被刪除,數(shù)據(jù)會(huì)丟失,因此不適合在非初始化時(shí)使用,因此在使用時(shí)需要判斷是否時(shí)初始化的情況