1、安裝mysql
npm i egg-mysql -S
2、在config/plugin.js里聲明改插件
exports.mysql = {
enable: true,
package: 'egg-mysql',
};
3、在config/config.default.js里配置
config.mysql = {
// 單數據庫信息配置
client: {
// host
host: 'localhost',
// 端口號
port: '3306',
// 用戶名
user: '****',
// 密碼
password: '*******',
// 數據庫名
database: 'egg',
},
// 是否加載到 app 上,默認開啟
app: true,
// 是否加載到 agent 上,默認關閉
agent: false,
};
4、在service服務層操作數據庫,符合Controller -> Service -> MySQL模式
this.app.mysql.query(sql, values); //sql語句模式
//比如查詢users表name=Jack的數據
let name = 'Jack';
this.app.mysql.query('select * from users where name = ?', [name]);
5、egg封裝增刪改查
1、插入,向users表內插入一條數據
const result = await this.app.mysql.insert('users', {
name: 'Jack',
age: 18
})
判斷:result.affectedRows === 1
2、查詢,查詢users表name=Jack的數據
const result = await this.app.mysql.select('users', {
columns: ['id', 'name'], //查詢字段,全部查詢則不寫,相當於查詢*
where: {
name: 'Jack'
}, //查詢條件
orders: [
['id', 'desc'] //降序desc,升序asc
],
limit: 10, //查詢條數
offset: 0 //數據偏移量(分頁查詢使用)
})
判斷:result.length > 0
3、修改,修改users表id=1的數據age為20
const result = await this.app.mysql.update('users', {
age: 20 //需要修改的數據
}, {
where: {
id: 1
} //修改查詢條件
});
判斷:result.affectedRows === 1
4、刪除,刪除users表name=Jack的數據
const result = await this.app.mysql.delete('users', {
name: 'Jack'
})
判斷:result.affectedRows === 1
5、Mysql常用語句
(1)關聯表查詢(查詢評價表,關聯用戶表頭像和昵稱)
select evaluate.*, user.name, user.figureurl from evaluate left join user on evaluate.userId = user.id where cId = 123
(2)更新商品點贊+1,並且一次更新id為1,2,3三條記錄
update commodity set praise = praise + 1 where id in (1,2,3)
6、事務。在某些情況下,執行一個操作需要多次操作數據庫,但這多次操作必須同時成功才行,比如打款的情況,需要從A賬戶扣錢,再向B賬戶加錢,假設A賬戶余額不足,則整個打款操作就應該恢復到原有狀態。
const conn = await app.mysql.beginTransaction(); // 初始化事務
try {
await conn.insert(table, row1); // 第一步操作
await conn.update(table, row2); // 第二步操作
await conn.commit(); // 提交事務
} catch (err) {
// error, rollback
await conn.rollback(); // 一定記得捕獲異常后回滾事務!!
throw err;
}
.
