如何在Firebird中使用交易?

Mas*_*ler 7 sql database sql-server firebird transactions

在MS SQL Server中,我可以轻松地将多个insert语句放入事务中,如下所示:

begin tran
insert into mytable values (1, 2, 3)
insert into mytable values (4, 5, 6)
commit tran
Run Code Online (Sandbox Code Playgroud)

我试图在Firebird中做同样的事情,但我无法弄清楚语法.谷歌搜索"Firebird事务语法"返回没有任何用处.我已经发现足够知道存在事务支持,但没有关于如何正确使用它的示例.

所以我想我也可以问这里.有谁知道如何使用Firebird数据库的多个插入来编写事务?

Adr*_*iro 8

补充@ Allan的答案(我赞成,BTW),这里有更多信息.

当你begin tran在SQL Server中,它并不意味着你现在开始交易.您已经在事务中,因为您已连接到数据库!什么begin tran确实是禁用的,这是在SQL Server的默认状态(除非另有说明)"在每个语句自动提交".

分别commit tran提交并将连接恢复为"在每个语句处自动提交"状态.

在任何数据库中,当您连接时,您已经处于事务中.这就是数据库的方式.例如,在Firebird中,即使只运行查询,也可以执行提交或回滚.

另一方面,某些数据库和连接库允许您使用"每个语句的自动提交"连接状态,这是SQL Server正在执行的操作.尽管该功能可能很有用,但它并不是很有说服力,并且会让初学者认为他们"不在交易中".


All*_*lan 6

Firebird总是使用事务.只要您在数据库中进行更改,该事务就会立即启动,并在您提交之前保持对该会话的打开状态.使用您的代码,它只是:

insert into mytable values (1, 2, 3);
insert into mytable values (4, 5, 6);
commit;
Run Code Online (Sandbox Code Playgroud)

  • 也许你的connection/lib设置为自动提交?看看我的回答. (2认同)
  • @Masion,现在,请检查您的事务隔离级别! (2认同)