我有两个脚本;其中一个将行插入到数据库中,而其他进程则是新输入的,即未处理的行。多次插入后依次选择
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