sqlite插入而drop完全重复

时间:2015-06-07 18:40:41

标签: mysql database sqlite

我正在抓取一些网站并将结果存储在sqlite中,因为我的抓取可能每个月都会重复,但我不想将重复的结果存储在我的数据库中,我该怎么办?

例如,我第一次

insert into tableName(A, B, C, D, E) values(a,b,c,d,e) 

然后我的数据库将有这条记录,下次我抓取这个网站时,我也会这样做,但我不想存储重复的结果,我能做的最好的方法是什么?

此外,如果我使用MySQL怎么办?

3 个答案:

答案 0 :(得分:1)

您可以使用insert ignore

SQLite的

insert or ignore into tableName(A, B, C, D, E) values(a,b,c,d,e) 

的MySQL

insert ignore into tableName(A, B, C, D, E) values(a,b,c,d,e) 

请注意两个代码之间的区别是,它们不一样。

这只有在有某种主键的情况下才有效。

答案 1 :(得分:1)

使用sqlite,create your table with a UNIQUE constraint

CREATE TABLE tableName (A INTEGER, B INTEGER, C INTEGER, D INTEGER, E INTEGER,
UNIQUE (A, B, C, D, E));

然后

INSERT OR IGNORE INTO tableName (A, B, C, D, E) values (a,b,c,d,e);

will only insert a new record if (a,b,c,d,e) is unique - 即表tableName中尚未出现。

add a UNIQUE index to an already existent table

CREATE UNIQUE INDEX unique_idx on tableName(A, B, C, D, E);

或使用MySQL,create a table with a unique index

CREATE TABLE tableName (A INT, B INT, C INT, D INT, E INT,
UNIQUE KEY unique_idx (A, B, C, D, E))

然后use INSERT IGNORE

INSERT IGNORE INTO tableName (A, B, C, D, E) values (a,b,c,d,e) 

add a UNIQUE KEY index to an already existent table

ALTER TABLE tableName ADD UNIQUE KEY unique_idx (A, B, C, D, E); 

答案 2 :(得分:0)

您可以创建一个临时/辅助表,说temp_tableName具有与tableName相同的架构。然后爬行时执行

insert into temp_tableName select * from tableName;

delete from tableName;

insert into tableName(A, B, C, D, E) values(a,b,c,d,e)  

如果爬行插入失败,则需要辅助表,然后您需要备份存储。另外,请考虑在DELETE/INSERT块中执行此步骤Transaction以获取原子性。