如何计算在一次查询后5分钟内插入的记录数?

时间:2015-07-12 11:47:48

标签: mysql

这主要是一个理论问题,而且主要是关于MySQL。 我可以编写一个单独的查询,从查询开始运行到结束时插入一些记录,假设表没有时间戳等,因此无法从表中的数据推断出此信息。

我厌倦了这个(也许它会澄清上面的内容):

select -(count(*) - (sleep(300) + count(*)) from my_table;

但它似乎并没有完成这项工作。 我知道我可以编写一个存储过程来执行此操作,但我只是好奇是否可以在单个查询中执行此操作,而无需编写新的函数/存储过程。

1 个答案:

答案 0 :(得分:1)

不,你真的不能,至少在理论上。数据库支持ACID properties个事务。 ACID中的“I”代表隔离,这特别意味着两个查询不会相互干扰。换句话说,查询不应该看到在查询开始后发生的插入。

实际上,根据设置,SELECT不一定表现为自己的交易。但是,它只能在任何给定的瞬间看到数据库,而不是知道何时发生特定的更改。

有适当的方法来实现你想要的。一个简单的方法是完全锁定SELECT的表(在MySQL中,您可以使用for update指令执行此操作)。查询仍然无法计算新行的数量。但是,无论如何它都会知道答案:0。