insert ignore
出于多种原因,这是更好的方法。
在性能方面,仅编译和执行一个查询,而不是两个。这节省了将内容移入和移出数据库的开销。
在维护方面,只有一个查询是更可维护的,因为逻辑全部放在一个地方。where
例如,如果添加了子句,则您很可能会错过在两个单独的查询中添加子句的可能性。
就准确性而言,只有一个查询应该没有(或至少少很多)竞争条件的机会。如果在select
和之间插入一行insert
,那么您仍然会收到错误消息。
然而,比insert ignore
是insert . . . on duplicate key update
。后者仅避免了重复问题的错误。insert ignore
可能会忽略您实际上关心的错误。
顺便说一句,无论如何,您应该检查语句中的错误。