我有一個表(InnoDB),它經常插入,更新和讀取(通常以幾毫秒的間隔)。我注意到,有時INSERT/UPDATE後面的SELECT語句會得到過時的數據。我認爲這是由於緩存,但把SQL_NO_CACHE
放在它前面並沒有真正做任何事情。MySQL SQL_NO_CACHE不工作
您如何確保SELECT始終等到先前的INSERT/UPDATE結束並且不從緩存中獲取數據?請注意,這些語句是從單獨的請求中執行的(不在相同的代碼執行中)。
也許我誤解了什麼SQL_NO_CACHE實際上做...
UPDATE:
@Uday中,INSERT,SELECT和UPDATE語句看起來如下:
INSERT myTable (id, startTime) VALUES(1234, 123456)
UPDATE myTable SET startTime = 123456 WHERE id = 1234
SELECT SQL_NO_CACHE * FROM myTable ORDER BY startTime
我嘗試使用沒有運氣的事務。
更多更新:
我認爲這實際上是插入一個問題,不更新。 SELECT語句總是試圖獲取按時間排序的最新行。但由於INSERT不執行任何表級鎖定,所以SELECT可能會獲取舊數據。有沒有辦法在執行INSERT時強制進行表級鎖定?
您是否會發布SELECT和UPDATEs的樣本... – Uday
您是什麼[isolation level](http://dev.mysql.com/doc/refman/5.5/en/set-transaction.html)使用?如果您使用「READ UNCOMMITTED」或「髒讀」,則可能會發生這種情況。 –
@MarcusAdams無論InnoDB的默認隔離級別是什麼,都不確定是否會回答你的問題。 – pixelfreak