我最终以相对直接的方式进行了此操作。话虽如此,我仍然很想知道是否有人在 MySQL (MariaDB 5.7) 中有更简单/更有效的方法
我在 Host+CVE 上有一个多列索引来捕获重复项。我还有一个 createDate 和 updateDate 列。 createDate 在导入时自动更新,updateDate 在导入时自动更新,或者在记录更新时自动更新,除非记录 updateDate 发生在下面的导入过程中(我想跟踪我们最后一次使用 GUI 实际接触记录的时间)。
LOAD DATA LOCAL INFILE '/tmp/Example.csv' INTO TABLE ExampleImport
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
INSERT INTO ExampleTable (PluginID,CVE,CVSS,Risk,Host,Protocol,Port,Name,Synopsis,Description,Solution,SeeAlso,PluginOutPut)
SELECT PluginID, CVE, CVSS, Risk, Host, Protocol, Port, Name, Synopsis, Description, Solution, SeeAlso, PluginOutput
FROM ExampleImport
ON DUPLICATE KEY UPDATE ImportDate = CURRENT_TIMESTAMP, UpdateDate = UpdateDate;
UPDATE ExampleTable x4
INNER JOIN (SELECT Host, MAX(UpdateDate) MaxDate
FROM ExampleTable
GROUP BY Host
) x2 ON x4.Host = x2.Host
SET FixDate = CURDATE(), x4.UpdateDate = x4.UpdateDate
WHERE x4.UpdateDate < x2.MaxDate;