【发布时间】:2021-12-10 10:55:55
【问题描述】:
简单示例(伪代码):
for (int i = 0; i < 100; i++) {
START TRANSACTION;
SELECT id, name FROM employees WHERE id = i;
IF (someFunction(id)) {
ROLLBACK;
CONTINUE; // GO TO NEXT EXECUTION OF FOR LOOP
}
UPDATE company SET good = good + 1;
COMMIT;
}
我可以在这个示例中使用 COMMIT(所以我的脚本中将有两个 COMMIT)而不是 ROLLBACK 吗?
如果我在选择后使用 COMMIT 而不是 ROLLBACK 对数据库有什么影响吗?
这里的 MySQL 和 PostgreSQL 有什么区别吗?
【问题讨论】:
-
someFunction 是否使用数据库?
-
@ysth 不,someFunction 不使用数据库。
-
所以对于每个 id 你开始一个新的事务,所以 cmit 什么都不做,就像你的 cqase 中的回滚一样,因为它只有 1 个命令
-
您的伪代码毫无意义。根据您在此处发布的内容,我希望执行
someFunction(id)作为UPDATE查询的一部分所做的任何事情,并完全取消整个START TRANSACTION | COMMIT | ROLLBACK事情。 -
只需省略
COMMIT和ROLLBACK并在代码完成后提交事务。
标签: mysql sql postgresql