我有兩個腳本;其中一個將行插入到數據庫中,而其他進程則是新輸入的,即未處理的行。多次插入後依次選擇
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))。
或者這不應該發生? (在這種情況下,我想這將不得不與第二個腳本查詢錯誤)
是否可以在插入語句中爲'id'使用相同的值? – Lucas 2013-03-22 15:09:02
對不起,我忘了說,id是AUTO_INCREMENT,所以0只是假的。 – 2013-03-22 16:11:39
如果是AUTO_INCREMENT,則應該將它關閉:將INSERT INTO插入表(col1,col2)VALUES('val3_1','val3_2')'。 – Lucas 2013-03-22 16:14:45