2015-07-12 25 views
0

這主要是一個理論問題,主要關於MySQL。 我可以編寫一個單一的查詢,它會爲我提供從查詢開始運行直到結束時插入的大量記錄(假設表沒有時間戳等),因此無法從表中的數據推斷出此信息。如何計算在單個查詢中,在5分鐘內插入了多少條記錄?

我厭倦了這樣的(也許它會澄清以上):

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

但它似乎並沒有做的工作。 我知道我可以編寫一個存儲過程來做到這一點,但我只是好奇,如果有一種方法可以在單個查詢中完成,而無需編寫新的函數/存儲過程。

+0

讓我們先從手頭的問題開始**爲什麼要在單個查詢中執行此操作?爲什麼不從你的應用程序中獲取計數,等待5分鐘,然後重新計數?除此之外:您可能需要使用觸發器或其他一些機制來保持(「更準確」)追蹤插入但在時間範圍內刪除的記錄的計數的計數(計數兩次將會「錯過」) – RobIII

+0

I如上所述,這主要是一個理論問題,並且出於好奇。這不是什麼是最實際的做法的問題,而是可以在單個查詢中完成。 –

回答

1

不,你真的不能,至少在理論上是這樣。數據庫支持事務的ACID properties。 ACID中的「I」代表隔離,具體意味着兩個查詢不會相互干擾。換句話說,查詢不應該在查詢開始後看到插入。

實際上,根據設置,SELECT不一定表現爲自己的交易。但是,它只能在任何特定時刻看到數據庫,而不是知道特定更改何時發生。

有適當的方法來完成你想要的。一個簡單的方法是完全鎖定SELECT的表格(在MySQL中,您可以使用for update指令執行此操作)。該查詢仍然無法計算新行的數量。但是,無論如何它都會知道答案:0.

相關問題