SQL本身的“commit”语句是一个事务吗?

时间:2018-04-05 18:06:22

标签: sql database transactions relational-database commit

在SQL中,每个语句都是一个事务。

如果在事务块内发生了commit语句并且成功执行了,那么如果系统在执行后立即崩溃,那么数据库状态是否仍有可能丢失?

3 个答案:

答案 0 :(得分:0)

  

如果系统在执行后立即崩溃

不,我相信,因为COMMIT已经执行,但是COMMIT仍在进行中,是的。但是这样的系统故障可能导致不一致的状态

答案 1 :(得分:0)

不,在SQL 中,每个语句都不是一个事务。事务包含一组语句,这些语句作为一个组执行,或者根本不执行,以保持数据的一致性。

提交事务后,系统崩溃不会撤消更改,除非出现灾难性的不可恢复错误(最不可能)。

某些数据库提供额外的SQL语句以支持基本的SQL语句(如DDL,DML等)以用于额外目的。例如:

begin transaction;
savepoint;
commit;
rollback;

这取决于每个数据库,这些都不是事务。只是采用SQL语句形式的额外命令(如果您的数据库定义它们)。之前提到的那些实际上是“事务分隔符”,它们不构成交易的一部分。

答案 2 :(得分:0)

提交/回滚表示事务结束。执行后,如果是提交,数据将反映在所有其他会话中。 如果您认为自己作为事务提交,则需要其他东西来完成该事务,例如回滚或其他提交。那将是一个无限循环。

交易就像旅程,提交/回滚是您的目的地,不是一个很好的例子,但可能有助于理解。