Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否可以将覆盖/追加批写入混合写入MySQL?_Php_Mysql_Database Indexes - Fatal编程技术网

Php 是否可以将覆盖/追加批写入混合写入MySQL?

Php 是否可以将覆盖/追加批写入混合写入MySQL?,php,mysql,database-indexes,Php,Mysql,Database Indexes,我正在为我的客户端设置一个上传程序(使用php),他们可以在自己的机器上选择一个CSV(以预先确定的格式)进行上传。CSV可能有4000-5000行。Php将通过读取CSV的每一行并将其直接插入DB表来处理该文件。那部分很简单 但是,理想情况下,在将此数据追加到数据库表之前,我希望查看其中的3列(A、B和C),并检查表中是否已经有这3个字段的匹配组合,如果是,我宁愿更新该行,而不是追加。如果没有这3列的匹配组合,我希望继续插入行,将数据追加到表中 我的第一个想法是,我可以使A、B和C列成为表中唯

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

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

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

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


关于最佳实践或巧妙方法的想法?

如果在(a、B、C)列上添加唯一索引,则可以使用以下语句来完成此操作:

“替换”的工作原理与“插入”完全相同, 除了如果表中有一个旧的行 具有与的新行相同的值 主键或唯一索引,旧 在删除新行之前删除行 插入


如果将3列设为唯一id,则可以使用重复键进行插入

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;
您可以在下面的中阅读更多有关这一便捷技术的信息