我刚刚在Wikipedia中读到,SQL本质上是事务性的。 我认为这意味着默认情况下,对SQL DBMS的每个语句都被视为事务。这是对的吗?
我能想到的一个例子可能会使这个问题变得相关,如果你考虑这样的更新声明:
UPDATE Employee SET salary=salary * 1.1 WHERE type='clerk';
如果正在处理这个并且导致DBMS关闭的一些失败,在重启时,在事务意义上,记录更新的行不会被回滚吗?
答案 0 :(得分:0)
至少在SQL Server中,如果您运行事务,请使用
打开该行BEGIN TRAN
并且您不提交或回滚事务,如果您想提交事务,它会询问您(如果您尝试退出窗口)。如果某些事情导致一切崩溃,并且我们有一个开放的事务(意思是,没有什么可以关闭它),它将不被视为已提交。
您的问题说明了为什么许多开发人员只有在没有错误时才会使用COMMIT TRAN
的另一个原因,因此默认情况下每个事务都会回滚。
免责声明:我 仅 引用SQL Server - 我不能说这适用于其他SQL数据库。
答案 1 :(得分:0)
答案是否定的。 SQL是一种语言,您描述的是ACID行为。尽管许多数据库系统都采用这种方式,但仍然可以创建一个使用SQL作为语言并允许语句部分执行的数据库。