我使用PHP/MySQL创建了一个系统,该系统可以下载一个大型的XML数据集,并对其进行分析,然后每周将解析的数据插入MySQL数据库。
该系统由两个结构相同的数据库组成。一个是生产数据库,另一个是临时数据库,首先解析并插入数据。
当数据被插入到临时数据库中时,我通过插入/替换生产数据库中的数据来执行合并。到目前为止,我已经做了以上所有的事情。然后我意识到,可能在新数据集中删除的数据将留在生产数据库中。
我需要执行一次检查,看看新数据是否仍然在生产数据库中,如果是,然后离开它,如果它不是删除生产数据库中的行,那么行就不会被留下留待执行。
出于参数的考虑,假设这两个数据库名为database_temporary和database_production。
我该怎么做呢?
发布于 2014-05-27 14:59:16
如果使用SQL进行合并,那么简单的SQL也可以执行删除操作:
delete from database_production.table
where pk not in (select pk from database_temporary.table)备注:
not exists mey的性能优于not in。见“不存在”与“左联接”之间有什么区别?和非IN与不存在与左联接/ IS : Server一个例子not exists
delete from database_production.table p
where not exists (select 1 from database_temporary.table t where t.pk = p.pk)执行情况说明:
正如@mgonzalez在关于这个问题的注释中指出的那样,您可能希望使用时间戳列(类似上次修改)来进行比较/合并,这样您就只需要更改行。这并不具体适用于delete,您不能为delete使用时间戳,因为行将不存在。
https://stackoverflow.com/questions/23892604
复制相似问题