const { db, s_db } = require('./libs/db');
// 当我们将原生的和封装过的,全封装好之后,我们就可以
// 测试事务了! 是不是很happy
const promise = new Promise((resolve, reject) => {
s_db.getConnection((err, conn) => {
if (err) {
reject(err)
} else {
resolve(conn);
}
})
})
setTimeout(async () => {
// 拿到connection ,剩下的我来处理下
let conn = await promise;
conn.beginTransaction(err => {
if (err) {
throw err;
} else {
console.log("开启事务成功")
conn.query("delete from 01users where ID = 2000008", function (e, rows, fields) {
if (e) {
conn.rollback((err) => {
throw err;
})
} else {
conn.query("delete from 01users where ID = 2000009", (e, rows, fields) => {
if (e) {
conn.rollback((err) => {
throw err;
})
} else {
//提交事务
conn.commit(function (err) {
if (err) {
conn.rollback(function () { if (err) { return err; } });
}
//关闭连接
conn.release();
});
}
})
}
});
}
})
})
db.js
const mysql = require('mysql')
const co = require('co-mysql')
//把数据库的密码,账号,地址,端口,表格都连接上!!
var conn = mysql.createPool({
host: 'localhost',
user: 'root',
password: '123456',
port: '3306',
database: 'action1'//上文说的名字
});
// 由于用到了事务,所以我还是把原声的也暴露出去!
module.exports = {
db: co(conn),
s_db: conn
}
事物这个东西,你首先要保证你的数据库,支持,否则你写也没用,实际开发过程中,
不要真正的删除数据,而是打个flag 这样若是出错的话,我们就全部重新改过来,无须事物也能搞定问题!
类似如下写法,用的co-mysql
有些同学,说co-mysql 过时了,那就就去研究mysql2