2016-08-18 40 views
4

如果我要运行DELETE FROM some_table,那就是超时,数据会发生什么变化?当SQL DELETE查询超时时,数据会发生什么情况?

的方式我看它,一两件事情可能发生:

  • 数据被删除了到查询超时,所以如果有数据库和第1,000,000条记录点500,000被删除,他们会保持删除。数据库现在包含了查询运行之前的一半数量。

  • 数据被删除,查询超时,数据被回滚(我猜测是由DELETE所做的日志?)。数据库现在包含与其开始的完全相同的数据。

两者似乎都合乎逻辑。会有100%的时间发生吗?或者这是依赖于我不知道的一些设置?请注意,我并没有询问DELETE的可行性,我知道TRUNCATE可能是适合的。这纯粹是出于对DELETE的超时功能的好奇。

+3

mysql是一个ACID数据库。个别的查询语句是原子的 - 它们要么完全完成,要么根本不做任何事情。 –

+0

@Marc:严格来说,它取决于所使用的引擎。 – sstan

+0

当* timeout *表示事务被中止时,DELETE将被回滚。 – dnoeth

回答

1

Oracle,SQL Server,MySQL,PostgreSQL数据库遵循ACID属性。因此,无论何时delete语句显示超时,它必须回滚。 您可以从这个Link得到ACID的概述。

相关问题