首页 > 解决方案 > 从源表离开的点每 1 小时从源表复制一次数据

问题描述

我正在尝试使用 mysql 查询/过程,它基本上将数据(不是所有数据,也不是来自所有字段)复制到另一个已经存在的表中,但该表中的字段名称与源字段不同。由于此 sql 查询将通过某个调度程序每 1 小时运行一次,因此它需要有一个应该知道/检查源表的逻辑,以便它不会再次复制相同的数据。我认为源表中需要一个标志。

表:产品收入日期 A MC 2020-10-11 B VI 2020-10-12 C MC 2020-10-12 D MC 2020-10-13

该表不断从前端应用程序实时添加记录。因此,每 1 小时后复制此数据的查询必须从上次离开的位置开始处理。

create table DemoTable ( 
    ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    ClientName varchar(20), 
    isMarried tinyint(1) DEFAULT 1 
);

INSERT INTO DemoTable(ClientName,isMarried) values('Larry',0); 
INSERT INTO DemoTable(ClientName) values('David');
INSERT INTO DemoTable(ClientName,isMarried) values('Mike',1); 
INSERT INTO DemoTable(ClientName) values('Carol');

标签: mysql

解决方案


如果您的另一个表也存储表中的主键(ClientID),DemoTable那么您可以在不修改数据库结构的情况下执行以下操作。

Table Structure:
DemoTable - ClientID(Pk), CilentName, isMarried
DemoTable_New - Id(PK), ClientID, ClientName
INSERT INTO DemoTable_New (ClientId, ClientName) 
SELECT d.ClientId, d.ClientName
FROM DemoTable d
LEFT JOIN DemoTable_New dn ON d.ClientId = dn.ClientId  -- Make sure to do Left Join
WHERE dn.Id IS NULL;  -- Only pick for which record was not found in DemoTable_New

推荐阅读