当我使用perl将infle加载到mysql数据库中时,为什么返回的计数不正确?
首先,春节前来自北京的问候-过年好!. 我有一个perl脚本将数据文件加载到数据库中。该脚本运行良好,但返回的信息总是不正确 问题: 代码如下所示:当我使用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)
$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。所以我认为加载过程不应该有删除操作。