我刚刚在Wikipedia中读到,SQL 本质上是事务性的。我认为这意味着默认情况下,对 SQL DBMS 所做的每条语句都被视为事务。这个对吗?
我能想到的一个可能使这个问题相关的例子是,如果您考虑这样的更新语句:
UPDATE Employee SET salary=salary * 1.1 WHERE type='clerk';
如果这正在处理并且有一些故障导致 DBMS 在重新启动时关闭,在事务意义上,更新的记录不会回滚吗?
我刚刚在Wikipedia中读到,SQL 本质上是事务性的。我认为这意味着默认情况下,对 SQL DBMS 所做的每条语句都被视为事务。这个对吗?
我能想到的一个可能使这个问题相关的例子是,如果您考虑这样的更新语句:
UPDATE Employee SET salary=salary * 1.1 WHERE type='clerk';
如果这正在处理并且有一些故障导致 DBMS 在重新启动时关闭,在事务意义上,更新的记录不会回滚吗?
至少在 SQL Server 中,如果你运行一个事务,用
BEGIN TRAN
并且您不提交或回滚事务,它会询问您(如果您尝试退出窗口)是否要提交事务。如果某些事情导致一切崩溃,并且我们有一个打开的事务(意思是,没有什么可以关闭它),它不会被认为是已提交的。
COMMIT TRAN
您的问题说明了许多开发人员仅在没有错误的情况下才使用 a 的另一个原因,因此默认情况下每个事务都会回滚。
免责声明:我只指 SQL Server - 我不能说这对其他 SQL 数据库也适用。
The answer is no. SQL is a language, what you describe is ACID behaviour. Though many database systems behave that way, it is still perfectly possible to create one that uses SQL as language and allows statements to be partially executed.