我有一个有趣的情况,我经常从服务器轮询数据。我无法控制它提供的内容,所以我只能处理它提供给我的内容。
我正在记录它提供的一些信息,并将其存储在一个MySQL数据库中。这并不是真正的问题,然而,我的问题是如何有效地保持数据与数据库的同步。
例如,在某一时刻,我可能有3个I 1001、1002、1003。我可以很好地将它们插入到数据库中,但是,如果我现在有1001和1003会怎么样呢?更新数据库以反映这一点的最有效方法是什么?基本上,我只知道我现在拥有什么,我没有办法知道发生了什么变化,除非我自己在PHP中进行计算。
我想我可以选择,找出差异,然后对丢失/添加的ID发出删除/插入命令。或者可能是DELETE NOT IN (),然后是INSERT。但是由于这个脚本一直在运行,所以我担心这不是很有效。
我的另一个想法是简单地为每个“玩家”创建一行,并使用CSV分隔的I列表。每次迭代我都可以更新该播放器的行,而不是SELECT/DELETE/INSERT。
有没有人遇到过类似的问题,并找到了很好的解决方案或有一些洞察力?我将不胜感激!我使用的是PHP。
发布于 2014-01-11 08:20:03
也许你可以试试REPLACE INTO,如果我能得到你想要的。
http://www.mysqltutorial.org/mysql-replace.aspx
如果要插入的记录不存在,MySQL REPLACE将插入一条新记录。
如果要插入的记录已经存在,MySQL REPLACE将首先删除旧记录,然后再插入新记录。
这将阻止您选择、删除和安装。这个可以处理这个问题。
发布于 2014-01-11 10:10:47
如果您能够截断整个表并重新加载它,那么您可以这样做。
或
创建一个加载了新数据的临时表
将原始表与临时表连接,并删除临时表中不存在的行
或
使用编程语言标识不再需要存在于原始表中的in并将其删除
https://stackoverflow.com/questions/21056833
复制相似问题