mysql - 两个保存点之间的嵌套事务回滚?

标签 mysql sqlite postgresql transactions

对于三种 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/

相关文章:

JAVA GUI - 从 MYSQL 获取并显示数据

php - mySql - 使用逗号分隔值列表创建连接

mysql addtime() 似乎无法长时间工作(很多天)

ios - 哪里不能使用核心数据?是否可以像MySql那样把核心数据当做数据库使用?

c - 带有行数据的sqlite3_update_hook?

django - 将 django web 应用程序连接到 gcloud 中的 postgresql

mysql - 通过创建表关系我会看到性能提升吗?

android - 如何使用房间从没有主键的表迁移?

mysql - 如何将Mysql的.sql转换为postgresql

sql - 需要sql查询