对于三种SQL类型(MySql、SQLite和PostgreSQL),我希望/需要以相同的方式处理保存点。
现在我的应用程序可以在一个大事务中更改数据库中的不同条目,并且需要一些嵌套事务来实现程序的特殊行为。
所以问题是,如果我创造了这样的东西:

BEGIN TRANSACTION;
--random insert/update statements
SET SAVEPOINT sp1;
--more random inserts/updates
SET SAVEPOINT sp2;
--inserts n stuff

(是的,语法可能不正确,只是一个例子)
所以我想知道是否可以在两个保存点sp1sp2之间进行回滚,而不必在sp2之后回滚插入/更新?

最佳答案

保存点将不会做您想要的事情。当回滚到保存点时,该保存点之后的所有内容都将回滚,而不管是否创建了以后的保存点。
把保存点想象成一个“堆栈”。你不能把东西从堆中间拉出来,你必须把所有东西都移到你想要的层。
您可能正在寻找自主事务。您要使用的数据库都不支持它们。在PostgreSQL中,您可以使用dblink模块创建到数据库的新连接并使用它;请参见http://www.postgresql.org/docs/current/static/dblink.html。我不知道MySQL或SQLite提供了什么解决方案,但是现在你知道你要找的是哪个词了,Google会帮你的。
如果可能的话,我建议您找到解决此应用程序设计需求的方法。让您的应用程序使用两个数据库连接和两个事务来完成您需要的工作,并根据需要协调这两个事务。

关于mysql - 两个保存点之间的嵌套事务回滚?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14727697/

10-12 05:36