2つのスクリプトがあります。それらの1つはデータベースに行を挿入し、他の処理は新しく入力された、これまでに処理されていない行を処理します。
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');
...
次に、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行をスキップしている)インスタンスが少なくとも1つあることに気付き、これを引き起こす原因とそれを防ぐ方法(一度スキップした場合)を考えていました。次回は>MAX(id)を使用するため、スキップし続けます。
それとも、これは起こらないはずですか?(この場合、2番目のスクリプトクエリでエラーが発生する必要があると思います)