php - 是否可以对 MySQL 进行混合覆盖/追加批量写入?

标签 php mysql database-indexes

我正在为我的客户设置一个 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/

相关文章:

javascript - 来自 JavaScript 的 Yii 值

php - MySQL、PHP : echo IDs from smalest to largest

mysql - 如何将mysql日期列的现有内容批量移动到不同类型的新内容?

php - 在 PHP PostgreSQL 查询结果中找到或未找到结果时显示消息

sql-server - SQL Server 中高效的字符串后缀搜索?

php - 如何从mysql加载数据到文本框

php - 如何乘以mysql的结果?

搜索字段上的 SQL 索引,我应该包括 Id

postgresql - 可延迟的、不区分大小写的唯一约束

php - 根据日期获取总金额