我正在为我的客户设置一个 uploader (使用 php),他们可以在他们的计算机上选择 CSV(采用预先确定的格式)进行上传。 CSV 可能有 4000-5000 行。 Php 将通过读取 CSV 的每一行并将其直接插入到 DB 表中来处理文件。这部分很简单。
但是,理想情况下,在将此数据附加到数据库表之前,我想查看其中的 3 列(A、B 和 C),并检查表中是否已经有这 3 个字段的匹配组合。表并且如果是这样我宁愿更新该行而不是附加。如果我没有这 3 列的匹配组合,我想继续插入该行,将数据附加到表中。
我的第一个想法是,我可以将列 A、B 和 C 作为表中的唯一索引,然后插入每一行,以某种方式检测“失败”插入(由于我的唯一索引的限制),然后进行更新。似乎这种方法比必须为每一行进行单独的 SELECT 查询来查看表中是否已有匹配的组合更有效。
第三种方法可能是简单地追加所有内容,不使用 MySQL 唯一索引,然后仅在客户端稍后查询该表时获取最新的唯一组合。不过,我试图避免该表中存在大量无用数据。关于最佳实践或巧妙方法的想法?
最佳答案
如果将 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 manual 中阅读有关此便捷技术的更多信息。 .
关于php - 是否可以对 MySQL 进行混合覆盖/追加批量写入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4410368/