问题描述
我在使用 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 (将#修改为@)