当我使用perl将infle加载到mysql数据库中时,为什么返回的计数不正确?

当我使用perl将infle加载到mysql数据库中时,为什么返回的计数不正确?,mysql,perl,Mysql,Perl,首先,春节前来自北京的问候-过年好!. 我有一个perl脚本将数据文件加载到数据库中。该脚本运行良好,但返回的信息总是不正确 问题: 代码如下所示: $sql_load="LOAD DATA LOCAL INFILE $FileName REPLACE INTO TABLE ".$TableName ; $sth=$dbi->do($sql_load) ;#or die "SQL Error: $DBI::errstr\n"; if(DBI->err)

首先,春节前来自北京的问候-过年好!.

我有一个perl脚本将数据文件加载到数据库中。该脚本运行良好,但返回的信息总是不正确

问题:

代码如下所示:

     $sql_load="LOAD DATA LOCAL INFILE $FileName REPLACE INTO TABLE ".$TableName ;
     $sth=$dbi->do($sql_load) ;#or die "SQL Error: $DBI::errstr\n";
     if(DBI->err){
         print "      after connect, SQL Error:$DBI::errstr\n";
     }else{
         print "      $sth . Records Uploaded \n";
     }
输出如下:

     7 . Records Uploaded.
但实际上:

wc-l$FileName是6,包括第一行字段名行, 数据行的计数为5

返回的计数始终等于正确的数字加上2

问题: 我已经在谷歌上搜索了很多次这个问题,但是运气不好,也没有从mysql文档中得到有用的信息。 我怎样才能得到正确的计数数?加2是什么意思?

这就是:

如果指定“替换”,则输入行将替换现有行。换句话说 对于主键或唯一索引具有相同值的字、行 作为现有行。看

当存在匹配项时,REPLACE命令会影响2行,因为您会得到一个删除加上一个插入:

REPLACE语句返回一个计数以指示行数 影响这是删除和插入的行的总和。如果 对于单行替换,计数为1,插入了一行,没有行 已删除。如果计数大于1,则显示一个或多个旧行 在插入新行之前已删除。这是可能的 单行替换多个旧行(如果表包含) 多个唯一索引,新行复制 不同唯一索引中的不同旧行


因此,我怀疑您的文件中有5行,其中2行已经存在于数据库中。

谢谢您的回复。奇怪的是,我的脚本每分钟运行一次。每分钟有5条新记录插入数据库A。然后我将数据导出到一个文件,并将它们加载到数据库B。所以我认为加载过程不应该有删除操作。