我有一个非常快速增长的MySQL表。我希望有一个持续的过程(例如每30分钟运行一次),它选择自上次运行进程以来所有“新”行。该表有一个名为id的AUTO_INCREMENT列,我想我可以用它来确保我得到所有记录。这是方法:
初始化
LAST_ID_SELECTED = 0
永远反复运行:
startID = 1 + LAST_ID_SELECTED
nextAutoIncrementID = getQuery("SELECT AUTO_INCREMENT FROM information_schema.tables WHERE TABLE_NAME = 'myTable'")
lastID = nextAutoIncrementID - 1
data = SELECT * FROM myTable WHERE id BETWEEN startID AND lastID
LAST_ID_SELECTED = lastID
但是,我认为这实际上不会起作用:我担心我可以获得我的(startID,lastID)范围并在完成ids< = lastID的所有插入之前进行我的选择查询。所以我实际上不会得到范围内的所有行(startID,lastID)。
这样做的正确方法是什么?