我有来自第三方的一行记录,包括第三方ID。有没有办法使用REPLACE
命令,它将使用第三方ID而不是我们的内部ID来知道哪些记录在它们已经存在时会被覆盖?
来自第三方的示例数据列表:
array( 'name' => 'Bob',
'age' => '30',
'external_ID' => '540745'
);
out数据库的表结构:
ID int auto_increment primary key,
name varchar(255),
age int,
external_id int
答案 0 :(得分:4)
让external_id
独一无二。它会起作用:
ALTER TABLE `test` ADD UNIQUE(`external_id`)
答案 1 :(得分:0)
我会非常重视使用REPLACE,原因很简单:IT MECHANICALLY PERFORMS DELETE AND INSERT UNDER THE HOOD !!!
Here is a bug report from 2005-09-26其中MySQL会在REPLACE上触发UPDATE触发器而不是DELETE和INSERT触发器。即使修复了这个错误,如果你有一个版本的MySQL在2005-09-26之前,立即升级或至少不要使用替换!!!!
最好不要使用INSERT IN DUPLICATE KEY UPDATE
如果您只是替换external_id,则可能不需要在exteral_id上使用UNIQUE INDEX。
查看使用REPLACE和具有auto_incrment ID的表时会发生什么:
REPLACE(内部DELETE和INSERT)将有效地更改与external_id关联的id字段。如果您跟踪年龄为30岁的Bob,其他表中使用ID为76且ID为76的外部ID 540745来引用Bob,则执行REPLACE可能会将Bob与其他表可能知道的原始ID断开连接。