MariaDB 在使用加载数据本地 infile

问题描述

我在使用 MariaDB 时遇到了一个奇怪的事情,我不知道这是否正常,或者我应该继续寻找代码中的错误

我正在批量创建 csv 文件,每批包含约 10000 行数据,然后使用 LOAD DATA LOCAL INFILE 将该临时文件插入到数据库表中。我在其中插入数据的表总共有 5 列,第一列是一个自动递增的主键。其他 4 列均在我的本地 csv 文件中提供。

我遇到的问题,如果我为 10 批文件运行我的脚本,我表中的最高 id 变得与预期的 96.545 不同(这是我插入的确切行数,在 PHP 中计算),在将行添加到 csv 文件之前)。我不知道为什么会这样,这是我运行的确切代码

function batchAttributeInsert($attributeBatch) {
    global $attributeLines;

    $tmpFileAttributes = DEFAULT_DIR_WHOME . 'cashback/tmp/' . uniqid('tmp.') . '.tmp';
    $tmpFileAttributesHandler = fopen($tmpFileAttributes,'w');
    
    foreach ($attributeBatch as $productId => $batch) {
         $attributesArray = array();

         foreach ($batch['attributes'] as $Attribute) {
            $attributeList = $Attribute->separate();

            foreach ($attributeList as $attributeData) {
                fputcsv($tmpFileAttributesHandler,array($attributeData['key'],$attributeData['value'],$attributeData['confidence'],$productId),"|","'");
                $attributeLines++;
            }
         }
    }    
    
    
    fclose($tmpFileAttributesHandler);
    DB('main')->query("LOAD DATA LOCAL INFILE '" . $tmpFileAttributes . "' INTO TABLE ProductAttributes FIELDS TERMINATED BY '|' ENCLOSED BY '\'' LInes TERMINATED BY '\\n' IGnorE 0 LInes (Attribute,Value,Confidence,products_ProductId)");

    unlink($tmpFileAttributes);
}

我运行这个脚本后,$attributeLines变成了96.545,表中主键字段的最大数字依次是:152.421。如果我在脚本之后执行 SELECT COUNT(*) FROM ProductAttributes 查询,MariaDB 会报告表中有 96.545 行。

如果我在对表进行 TruncATE-ed 后使用完全相同的参数重新运行脚本,行计数和内部 $attributeLines 报告相同的值,但最高的主键 ID 发生变化,到 150.000 范围内的不同数字。

有人能告诉我在这个过程之后丢失的自动增量值会发生什么,或者为什么我得到的数字如此不一致?这可能是我的脚本中的错误,还是我没有什么可担心的?

我正在使用 Server version: 10.4.19-MariaDB MariaDB Server

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)