0

我正在为我的客户设置一个上传器(使用 php),他们可以在他们的机器上选择一个 CSV(以预先确定的格式)进行上传。CSV 可能有 4000-5000 行。Php 将通过读取 CSV 的每一行并将其直接插入 DB 表来处理文件。那部分很容易。

但是,理想情况下,在将此数据附加到数据库表之前,我想查看 3 个列(A、B 和 C)并检查表中是否已经有这 3 个字段的匹配组合和 IF所以我宁愿更新该行而不是追加。如果我没有这 3 列的匹配组合,我想继续插入行,将数据附加到表中。

我的第一个想法是我可以将 A、B 和 C 列设为表中的唯一索引,然后插入每一行,以某种方式检测“失败”插入(由于我的唯一索引的限制),然后进行更新. 似乎这种方法比必须为每一行进行单独的 SELECT 查询以查看我的表中是否已经有匹配的组合更有效。

第三种方法可能是简单地附加所有内容,不使用 MySQL 唯一索引,然后仅在客户端稍后查询该表时获取最新的唯一组合。但是,我试图避免该表中有大量无用的数据。

关于最佳实践或聪明方法的想法?

4

2 回答 2

1

如果在 ( A, B, C ) 列上添加唯一索引,则可以使用REPLACE在一个语句中执行此操作:

REPLACE 的工作方式与 INSERT 完全相同,只是如果表中的旧行与 PRIMARY KEY 或 UNIQUE 索引的新行具有相同的值,则在插入新行之前删除旧行...

于 2010-12-10T15:31:09.303 回答
1

如果将 3 列设为唯一 ID,则可以使用 ON DUPLICATE KEY 执行 INSERT。

INSERT INTO table (a,b,c,d,e,f) VALUES (1,2,3,5,6,7)
  ON DUPLICATE KEY UPDATE d=5,e=6,f=7;

您可以在MySQL 手册中阅读更多关于这种便捷技术的信息。

于 2010-12-10T15:31:55.427 回答