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; }
.