Php MySQL上的重复密钥更新多次插入
我正在通过CSV循环,将一些记录的名称字段插入/更新到表中。脚本不能插入记录,如果记录存在,只更新名称字段 对于较大的CSV文件,这需要花费相当长的时间,因此我想知道是否可以使用ON DUPLICATE KEY UPDATE命令将此代码修改为多个INSERT查询,该命令只会更新记录的name字段 CSV不包含表的所有字段,仅包含主键和名称的字段。因此,“替换”在这种情况下不起作用Php MySQL上的重复密钥更新多次插入,php,mysql,sql,csv,Php,Mysql,Sql,Csv,我正在通过CSV循环,将一些记录的名称字段插入/更新到表中。脚本不能插入记录,如果记录存在,只更新名称字段 对于较大的CSV文件,这需要花费相当长的时间,因此我想知道是否可以使用ON DUPLICATE KEY UPDATE命令将此代码修改为多个INSERT查询,该命令只会更新记录的name字段 CSV不包含表的所有字段,仅包含主键和名称的字段。因此,“替换”在这种情况下不起作用 if (($handle = fopen($_FILES['csv']['tmp_name'], "r")) !==
if (($handle = fopen($_FILES['csv']['tmp_name'], "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$title = 'Import: '.date('d-m-Y').' '.$row;
# CHECK IF ALREADY EXISTS
$explode = explode('-',$data[0]);
$areacode = $explode[0];
$exchange = $explode[1];
$number = $explode[2];
$update = "INSERT INTO ".TBLPREFIX."numbers SET
area_code = ".$areacode.",
exchange = ".$exchange.",
number = ".$number.",
status = 1,
name = '".escape($data[1])."'
ON DUPLICATE KEY UPDATE name = '".escape($data[1])."'";
mysql_query($update) or die(mysql_error());
$row++;
}
fclose($handle);
$content .= success($row.' numbers have been imported.');
}
在开始插入之前打开事务,并在插入后提交。通过这种方式,数据库可以优化磁盘上的写入操作,因为写入操作发生在单独的内存空间中。在没有事务的情况下,所有单个查询都会一次自动提交,并且对其他每个查询都有效 至少我希望您使用InnoDB作为存储引擎—MyISAM不支持事务,并且有其他明显的缺点。如果可能的话,你应该避免