CNode

mysql 事务,回滚没有反应

Lluoliangle发布于12 年前最后回复12 年前7 回复7563 浏览0 收藏
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。请问问题出在什么地方?谢谢

查看回复

回复 (3)

L
luoliangle#1·12 年前

1:可是之前插入UserInfo表的数据,无论之后插入UserLoginInfo表是否成功都一直存在,不会回滚,是不是mysql配置方面有问题呢?还是开发环境的问题,我是用的mac,被这个问题搞死了,要疯了~~~~ 2: bearcat-dao没使用过,我研究下,谢谢提醒

L
luoliangle#2·12 年前

问题解决了,还是表的存储结构的问题,之前用phpmyadmin改过表的存储结构。以为改成InnoDB了,没想到phpMyAdmin没有改成功,谢谢fantasyni的回复,让我坚定了代码没有问题的判断,又查了一遍数据库设置。以后还是用命令行修改数据库靠谱!

参与回复
登录后即可参与回复。登录