SQL“本质上是事务性的”吗?

时间:2013-04-01 14:45:20

标签: database transactions

我刚刚在Wikipedia中读到,SQL本质上是事务性的。 我认为这意味着默认情况下,对SQL DBMS的每个语句都被视为事务。这是对的吗?

我能想到的一个例子可能会使这个问题变得相关,如果你考虑这样的更新声明:

UPDATE Employee SET salary=salary * 1.1 WHERE type='clerk';

如果正在处理这个并且导致DBMS关闭的一些失败,在重启时,在事务意义上,记录更新的行不会被回滚吗?

2 个答案:

答案 0 :(得分:0)

至少在SQL Server中,如果您运行事务,请使用

打开该行
BEGIN TRAN

并且您不提交或回滚事务,如果您想提交事务,它会询问您(如果您尝试退出窗口)。如果某些事情导致一切崩溃,并且我们有一个开放的事务(意思是,没有什么可以关闭它),它将被视为已提交。

您的问题说明了为什么许多开发人员只有在没有错误时才会使用COMMIT TRAN的另一个原因,因此默认情况下每个事务都会回滚。

免责声明:我 引用SQL Server - 我不能说这适用于其他SQL数据库。

答案 1 :(得分:0)

答案是否定的。 SQL是一种语言,您描述的是ACID行为。尽管许多数据库系统都采用这种方式,但仍然可以创建一个使用SQL作为语言并允许语句部分执行的数据库。