PostgreSql中的回滚是什么意思,什么时候用?
What is the meaning of the rollback in PostgreSql and when to use it?
PostgreSql中的回滚是什么意思,什么时候用?
据我所知,如果一个人正在做一些交易然后通过回滚 he/she 可以保证这个交易会回滚(不会发生)。
来自官方文档的描述:"Description. ROLLBACK rolls back the current transaction and causes all the updates made by the transaction to be discarded".
现在我不明白为什么有人会想要写一个交易然后隐含地坚持它的终止?
在我看来,没有人应该使用回滚,而是他们应该坚持提交,因为提交会让事务在正确的情况下发生,否则就终止它。
一个事务可以由多个数据库语句组成,并且可能会有交错的应用程序代码。
想象一下简单的汇款:
START TRANSACTION;
SELECT amount FROM account WHERE account_nr = 432 FOR UPDATE;
/* do some calculation in the application */
UPDATE account SET amount = 543.23 WHERE account_nr = 432;
SELECT amount FROM account WHERE account_nr = 123 FOR UPDATE;
/* do another calculation in the application */
UPDATE account SET amount = 1903.4 WHERE account_nr = 123;
COMMIT;
现在您随时都可能遇到问题,例如:
- 第二个
SELECT
语句可能return没有结果,因为没有这个帐号。
- 第二个
UPDATE
可能会失败,因为它违反了数据库约束。
- 应用程序中的第二次计算可能会导致错误情况。
如果发生类似的事情,您需要中止事务并撤消其工作。例如,您不能允许对帐户 432 的更改可见。
在关系数据库中执行此操作的正确方法是发出 ROLLBACK
,然后所有这些都会自动发生。
事务是一种为用户提供的服务,可以让用户轻松编写可靠且健壮的代码。
PostgreSql中的回滚是什么意思,什么时候用?
据我所知,如果一个人正在做一些交易然后通过回滚 he/she 可以保证这个交易会回滚(不会发生)。
来自官方文档的描述:"Description. ROLLBACK rolls back the current transaction and causes all the updates made by the transaction to be discarded".
现在我不明白为什么有人会想要写一个交易然后隐含地坚持它的终止?
在我看来,没有人应该使用回滚,而是他们应该坚持提交,因为提交会让事务在正确的情况下发生,否则就终止它。
一个事务可以由多个数据库语句组成,并且可能会有交错的应用程序代码。
想象一下简单的汇款:
START TRANSACTION;
SELECT amount FROM account WHERE account_nr = 432 FOR UPDATE;
/* do some calculation in the application */
UPDATE account SET amount = 543.23 WHERE account_nr = 432;
SELECT amount FROM account WHERE account_nr = 123 FOR UPDATE;
/* do another calculation in the application */
UPDATE account SET amount = 1903.4 WHERE account_nr = 123;
COMMIT;
现在您随时都可能遇到问题,例如:
- 第二个
SELECT
语句可能return没有结果,因为没有这个帐号。 - 第二个
UPDATE
可能会失败,因为它违反了数据库约束。 - 应用程序中的第二次计算可能会导致错误情况。
如果发生类似的事情,您需要中止事务并撤消其工作。例如,您不能允许对帐户 432 的更改可见。
在关系数据库中执行此操作的正确方法是发出 ROLLBACK
,然后所有这些都会自动发生。
事务是一种为用户提供的服务,可以让用户轻松编写可靠且健壮的代码。