我有两个脚本;其中一个将行插入到数据库中,而另一个处理新输入的、迄今为止未处理的行。
CREATE TABLE table (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, col1 VARCHAR(32), col2 VARCHAR(32));
所以第一个脚本做了几个单独的插入查询:
INSERT INTO table (id, col1 ,col2) VALUES (0, 'val1_1', 'val1_2');
INSERT INTO table (id, col1 ,col2) VALUES (0, 'val2_1', 'val2_2');
INSERT INTO table (id, col1 ,col2) VALUES (0, 'val3_1', 'val3_2');
...
然后第二个脚本使用类似这样的东西来选择未处理的行:
SELECT * FROM table WHERE id > (SELECT MAX(id FROM table_processed)) ORDER BY id LIMIT 1000;
(do some processing)
(for each id processed from table: INSERT INTO table_processed (id) VALUES ({table.id});)
有时,第一个脚本需要插入 5000 行。我注意到至少有一个实例是处理脚本似乎跳过了许多行(基本上跳过了其中的 3000 行),并且想知道是什么导致了这种情况以及如何防止它(如果它跳过它们一次,那么下次它会继续跳过它们,因为它使用 > MAX(id))。
或者这不应该发生?(在这种情况下,我猜第二个脚本查询一定是错误的)