我可以使用"最后更新"时间戳选择MySQL记录进行更新?

时间:2013-01-02 02:52:46

标签: mysql

我有一个大约30,000行的MySQL数据库。我每晚将此数据库更新到远程服务器,但一次不会更新超过50行。我是唯一更新数据库的人。我想开发一种方法,只将CHANGED行导出到远程服务器。

为了节省数据库中的空间并节省导出到远程服务器的时间,我构建了“存档”表(在远程服务器上),其中的记录将不再更新,并且不会驻留在本地数据库。但我知道将这些数据拆分成多个表是糟糕的设计,如果需要更改表的结构,可能会导致问题。

所以我想重建数据库,以便所有具有相似表结构的记录都在一个表中(就像数据库小得多时)。结果表的大小(包含所有存档记录)将超过80,000行,在整个数据库包中导出的数量要大得多。

要做到这一点,我想 (1)添加或修改行时,更新每行中的“上次更新”时间戳 (2)当“最后更新”时间戳大于上次导出操作的时间戳时,仅选择要导出的表中的行 (3)编写一个查询,用于构建仅包含新行和更新行的导出.sql文件 (4)更新在下次导出期间用于比较的导出操作的时间戳

有没有人这样做过?如果是这样,我会很感激有关如何实现这一目标的一些指导。

史蒂夫

2 个答案:

答案 0 :(得分:2)

如果您添加一个timestamp数据类型的列,例如last_updated timestamp,则每次更改行时,它都会自动更新为now()

然后每天早些时候,只需发布​​昨天的变化:

select * from mytable
where last_updated between subdate(CURDATE(), 1) and CURDATE()

答案 1 :(得分:0)

为什么不将远程服务器设置为复制从站? MySQL只会在那种情况下发送更新的行,并且非常快速/有效地发送。

使用官方复制策略通常是可取的,而不是自己动手。你会有很多例子可供使用,很多人都会了解如果你遇到问题会发生什么。