mysql doesn't rollback when error occurs when using transaction

frebpwbc  于 5个月前  发布在  Mysql
关注(0)|答案(1)|浏览(48)

这是一个非常简单的SQL命令:

start transaction;

insert into new_data(textvalue) values ("data1");

insert into new_data(brak) values ("data2");

commit;

字符串
所以表new_data只有一个字段叫做“textvalue”.“brak”不存在.我想因为我在真实的开始声明“start transaction”所以当第二次插入发生错误时,第一次插入将回滚.然而,我检查了数据库,第一次插入仍然成功,表有一个新的roll“data1”.
有人能解释一下为什么会发生这种情况吗?
谢谢

e4eetjau

e4eetjau1#

Mysql不会为你回滚,如果你看到错误,你需要运行回滚。如果你在workbranch中运行脚本,它会一个接一个地运行你的sql,所以最终它是提交的。
这个例子向你展示了一个存储过程如何为你回滚.

DELIMITER $$

CREATE PROCEDURE `sp_to_insert`()
BEGIN
    DECLARE `_rollback` BOOL DEFAULT 0;
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1;
    START TRANSACTION;

    INSERT INTO new_data(textvalue) VALUES ("data1");
    INSERT INTO new_data(brak) VALUES ("data2");

    IF `_rollback` THEN
        ROLLBACK;
    ELSE
        COMMIT;
    END IF;
END$$

DELIMITER ;

字符串

相关问题