这解决了您对插入数据需要太长时间等的担忧。我理解它就像你每次都重建你的桌子。因此,不要这样做,只需获取表中尚未包含的新数据。由于查找数据是否已经存在于您的报告表中可能也很昂贵,因此只需获取增量即可。就是这样:
确保在每个表中都需要这样的列:
ALTER TABLE yourTable ADD COLUMN created timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
该ON UPDATE
子句当然是可选的,不知道是否需要跟踪变化。如果是这样,请给我评论,我可以为您提供一个解决方案,您可以使用该解决方案保留您的数据历史记录。
现在您需要一个包含一些元信息的小表。
CREATE TABLE deltameta (tablename varchar(50), LSET timestamp, CET timestamp);
LSET 是 Last Success Extraction Time 的缩写,CET 是 Current Extraction Time 的缩写。
当您获取数据时,它的工作方式如下:
UPDATE deltameta SET CET = CURRENT_TIMESTAMP WHERE tablename = 'theTableFromWhichYouGetData';
SELECT @varLSET := LSET, @varCET := CET FROM deltameta WHERE tablename = 'theTableFromWhichYouGetData';
INSERT INTO yourReportTable (
SELECT whatever FROM aTable WHERE created >= @varLSET AND created < @varCET
);
UPDATE deltameta SET LSET = CET WHERE tablename = 'theTableFromWhichYouGetData';
如果在插入脚本过程中出现任何问题,您将在下次运行时获得相同的数据。此外,如果您需要回滚,您可以在此处处理事务。同样,如果您需要帮助,请写评论。