我有一个表(InnoDB),它经常被插入、更新和读取(通常相隔几毫秒)。我注意到有时在 INSERT/UPDATE 之后的 SELECT 语句会得到陈旧的数据。我认为这是由于缓存造成的,但是放在SQL_NO_CACHE
它前面之后并没有真正做任何事情。
你如何确保 SELECT 总是等到前一个 INSERT/UPDATE 完成并且不从缓存中获取数据?请注意,这些语句是从单独的请求中执行的(不在同一代码执行中)。
也许我误解了 SQL_NO_CACHE 实际上做了什么......
更新:
@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
我尝试使用没有运气的交易。
更多更新:
我认为这实际上是 INSERT 的问题,而不是 UPDATE 的问题。SELECT 语句总是尝试获取按时间排序的最新行。但由于 INSERT 不执行任何表级锁定,因此 SELECT 可能会获取旧数据。执行 INSERT 时有没有办法强制表级锁定?