如果你有一个唯一的键,那么下面会在重复键上产生一个错误:
insert into primary(col1, . . .)
select col1, . . .
from secondary;
以下是避免此错误的三种方法。第一个是insert ignore:
insert ignore into primary(col1, . . .)
select col1, . . .
from secondary;
insert ignore 的问题在于它忽略了所有错误。因此,除了重复唯一键错误之外,您可能会错过一些重要的事情。
第二个是on duplicate key update。您需要输入“无操作”更新语句:
insert into primary(col1, . . .)
select col1, . . .
from secondary
on duplicate key update col1 = col1;
这通常是最简单的方法。
第三个是要有join或not exists逻辑:
insert into primary(col1, . . .)
select col1, . . .
from secondary
where not exists (select 1 from primary where primary.keycol = secondary.keycol);
如果两个查询同时插入行,我认为这可能会导致竞争条件。