在MySQLWorkbench中执行带有事务的存储过程总是自动提交?

时间:2015-10-11 06:46:30

标签: mysql transactions mysql-workbench autocommit

我有这个STP:

CREATE DEFINER=`user1`@`%` PROCEDURE `test`(
    OUT result TINYINT
)
BEGIN
    DECLARE EXIT HANDLER FOR SQLEXCEPTION 
        BEGIN
            SET result = -1;
            ROLLBACK;
        END;

    START TRANSACTION;
        INSERT INTO testtable (field1, field2) VALUES (11, 22);
        SET result = 1;
END

在MySQLWorkbench(6.3 64b)中执行后,testtable有新记录。我虽然没有提交数据,因为没有提交声明。

然后我尝试再次通过C#客户端调用该STP,这次,新数据不会被提交。

请帮我解释这个问题,我不明白在Workbench中调用STP和另一个客户端调用STP之间有什么不同。

感谢。

1 个答案:

答案 0 :(得分:1)

不同之处在于,当您在mysql workbench中再次查询表时,您处于同一会话中。即使您的更改尚未提交,即使您的更改未提交,您仍然可以看到它们,因为允许相同的客户端会话看到未经修改的更改。

但是,如果启动mysql workbench或mysql shell的新会话,您将看不到通过现有工作台会话所做的更改。