【发布时间】:2013-02-06 11:16:08
【问题描述】:
对于三种 SQL 类型(MySql、SQLite 和 PostgreSQL),我希望/需要以相同方式处理保存点。
现在我的应用程序可以在一个大事务中更改数据库中的不同条目,并且需要一些嵌套事务来实现程序的特殊行为。
所以问题是,如果我创建类似的东西:
BEGIN TRANSACTION;
--random insert/update statements
SET SAVEPOINT sp1;
--more random inserts/updates
SET SAVEPOINT sp2;
--inserts n stuff
(是的,语法可能不正确,这只是一个例子)
所以我想知道是否可以在sp1 和sp2 两个保存点之间进行回滚而不回滚sp2 之后的插入/更新?
【问题讨论】:
-
不确定你在问什么。你想
ROLLBACK TO SAVEPOINT sp1;吗?因为如果是这样,在 PostgreSQL 上,你就是这样做的。您是否在问是否可以回滚 SP1 和 SP2 之间的更改而不回滚以后的更改?如果是这样,不,你不能用子事务来做到这一点,你需要自治事务,这是完全不同的事情。请澄清,并在您进行编辑后在此处发表评论。 -
是的,我只想回滚这两个保存点之间的更改。
标签: mysql sqlite postgresql transactions