【发布时间】:2019-01-12 22:02:11
【问题描述】:
我想知道 MySQL 用户定义的变量是否可以使用 Node.js mysql 模块工作。下面的示例准确地突出了我想要使用事务实现的目标:
connection.beginTransaction(err => {
if (err) { throw err; }
connection.query('INSERT INTO user SET = ?', {id: 12, username: 'name'}, (err, results) => {
if (err) {
return connection.rollback(function() {
throw error;
});
}
connection.query('SELECT @user_id:=userID FROM user WHERE username = ?', ['name'], (err, results) => {
if (err) {
return connection.rollback(function() {
throw error;
});
}
connection.query('INSERT INTO authentication SET `userID` = @user_id, ?', {password: 'userpassword'}, (err, results) => {
if (err) {
return connection.rollback(function() {
throw error;
});
}
connection.commit(err => {
if (err) {
return connection.rollback(function() {
throw err;
});
}
console.log('success!');
});
});
});
});
});
您可能想知道,为什么不在第三个查询中使用第二个查询的结果。事务函数被包装在一个实用函数中,该函数接受查询作为要使用事务执行的参数。
如果上面的代码示例不起作用,请有一种简洁的方法来实现这一点。谢谢。
【问题讨论】:
-
如果你有代码为什么不自己试试看呢?
-
@Shadow 这是一个很好的观点,但我现在没有足够的时间来测试代码。我想知道这是否有助于我决定如何构建我的数据库。
-
测试代码不是奢侈品。这是必需品。我们绝对无法测试您的代码,因为我们错过了很多上下文和数据库结构。此外,我看不到上述代码的正确性对数据库结构有何影响。
-
@Shadow 感谢您的努力。正在设置运行代码示例的环境。