我在MySQL中有一个表,每晚都有一个cron任务更新。 每行都被更改,因为我从XLS文件获取数据并且必须更新所有值。
起初我的问题是,是否值得更新每一行,或者另一方面只需删除所有并再次插入。我坚持使用UPSERT方法,因为我阅读的内容更加充足,快速,甚至优雅,丢失了所有数据,但如果我错了,请纠正我。
好吧,现在我的问题是关于不是新的行,每次cron运行时都不会更新。 XLS可能没有固定长度,所以有一天可能会减少几行......或更多。
如何在同一" UPSERT"中删除这些行?声明吗
修改的: 我意识到可能在这种情况下最好丢弃旧数据并重新添加它们,尽管起初我的目标是避免这种情况。
答案 0 :(得分:1)
由于每次都更新所有行并且你无法检查无变化行? 如何简单地截断&批量插入所有?
答案 1 :(得分:0)
甚至优于DROPping或TRUNCATEing如下。这是因为停机时间为零。
CREATE TABLE new LIKE real;
LOAD DATA or otherwise do bulk INSERT into `new`
RENAME TABLE real TO old, new TO real;
DROP TABLE old;
我喜欢把old
交给我,直到我有机会确认批量加载没有以某种方式愚蠢而且放松一切。
表被阻止的唯一时间是在RENAME
期间,但这是如此之快,我说“零停机时间”。