在MS SQL Server中,我可以轻松地将多个insert语句放入事务中,如下所示:
begin tran
insert into mytable values (1, 2, 3)
insert into mytable values (4, 5, 6)
commit tran
我试图在Firebird中做同样的事情,但我无法弄清楚语法。谷歌搜索“Firebird事务语法”返回没有任何用处。我已经发现足够知道存在事务支持,但没有关于如何正确使用它的示例。
所以我想我也可以问这里。有谁知道如何使用Firebird数据库的多个插入来编写事务?
补充@ Allan的答案(我赞成,BTW),这里有更多信息。
当您在SQL Server中执行begin tran
时,并不意味着您现在正在启动事务。您已经在事务中,因为您已连接到数据库! begin tran
真正做的是禁用“每个语句的自动提交”,这是SQL Server中的默认状态(除非另有说明)。
commit tran
分别提交并恢复与“在每个声明中自动提交”状态的连接。
在任何数据库中,当您连接时,您已经处于事务中。这就是数据库的方式。例如,在Firebird中,即使只运行查询,也可以执行提交或回滚。
另一方面,某些数据库和连接库允许您使用“每个语句的自动提交”连接状态,这是SQL Server正在执行的操作。尽管该功能可能很有用,但它并不是很有说服力,并且会让初学者认为他们“不在交易中”。
Firebird总是使用事务。只要您在数据库中进行更改,该事务就会立即启动,并在您提交之前保持对该会话的打开状态。使用您的代码,它只是:
insert into mytable values (1, 2, 3);
insert into mytable values (4, 5, 6);
commit;
从FB 2.5开始,可以从当前的内部开始新的交易。
IN AUTONOMOUS TRANSACTION
DO
< simple statement | compound statement >
http://www.firebirdsql.org/rlsnotesh/rlsnotes25.html#rnfb25-psql-auton