Mysql重复键/删除

时间:2010-06-25 17:52:09

标签: mysql

基本上我正在创建一个汇总表。

问题是有时主表中的数据是手动修改的。我正在使用ON DUPLICATE KEY UPDATE,但是我还需要像ON MISSING KEY DELETE这样的东西。摘要需要更新为已更改的数据。

真正的最佳解决方案是删除所有摘要记录并重新运行INSERT SELECT查询吗?这似乎不是一个好主意。

不在select查询中的任何键都不应该在摘要表中。

3 个答案:

答案 0 :(得分:1)

填写summary_table后,您可以这样做:

DELETE s FROM summary_table s LEFT OUTER JOIN original_table o ON s.id = o.id
WHERE o.id IS NULL;

这将从summary_table中删除original_table中不再存在id的任何行。

我认为你没有办法在一个声明中做到这一点。

答案 1 :(得分:0)

我不确定我理解,但听起来你想要在主表上为INSERT和UPDATE添加添加到摘要的触发器,以及从摘要中减去DELETE的另一个触发器...

答案 2 :(得分:0)

如果摘要查询很快并且更改是零星的,则可以重新运行摘要。您可以考虑使用触发器,以便在删除时删除1,在插入时添加1