我遇到了一些有趣的事情。我已经使用 pgAdmin 作为 GUI 执行了 SQL 脚本。适当地打开和关闭自动提交。
执行的脚本包含以下语句:
begin;
insert into test values (5);
rollback;
insert into test values (6);
rollback;
insert into test values (7);
commit;
我在两次执行中都得到了这个结果。
警告:没有正在进行的交易
警告:没有正在进行的交易
提交
显然这两个警告都是由第二次回滚和最后一次提交造成的。但是为什么尽管执行这些脚本时自动提交值不同,但这两次执行之间没有区别?
我对此进行了任何解释,但找不到任何对这种行为有用的东西。
对此有何解释?
第一次回滚将恢复自
begin
以来事务中的所有内容并 关闭事务。
insert into test values (6);
在任何事务之外运行,并立即应用于数据库。它没有被回滚。第二次回滚什么也不做;没有公开交易。因此第一个警告,'WARNING: there is no transaction in process'.
提交命令也不执行任何操作,因此出现第二个警告,
'WARNING: there is no transaction in process'.
我希望测试表包含 6 和 7。