var config={
"host" : "localhost",
"database" : "test",
"user" : "root",
"password" : ""
},mysql=require("mysql");
var connection = mysql.createConnection(config);
connection.beginTransaction(function(err) {
if (err) { throw err; }
connection.query('INSERT INTO UserInfo (NickName,InterestClassId,InterestId,Activity,Version,CreateTime) VALUES (?,?,?,?,?,?)' ,[30, 17,18,1,1,new Date()]
, function(err, result) {
if (err) {
connection.rollback(function() {
throw err;
});
}
connection.query('INSERT INTO UserLoginInfo (UserId,LoginName,Password,CreateTime) VALUES (?,?,?,?) ,[17,18, 11,new Date()]
, function(err, result) {
if (err) {
connection.rollback(function() {
throw err;
});
}
connection.commit(function(err) {
if (err) {
connection.rollback(function() {
throw err;
});
}
console.log('success!');
});
});
});
});
代码想实现的逻辑是先插入用户信息到UserInfo表,成功后在把用户名插入UserLoginInfo表。如果插入UserLoginInfo不成功则回滚将之前插入UserInfo表的数据删除。UserLoginInfo表的LoginName有唯一性约束,我在测试的时候故意提供了一个重名的LoginName,代码抛出UserLoginInfo插入错误后应该要回滚,将之前插入UserInfo的删除。可是我在数据库里查看之前插入UserInfo的记录还在。这两张表的存储结构都是InnoDB。请问问题出在什么地方?谢谢