PHP MYSQL 将 AUTO INCREMENT 设置为 MAX + 1

标签 php mysql sql csv auto-increment

我有一个 PHP 文件,它使用 LOAD DATA INFILE sql 函数将 CSV 文件中的数据插入到 MYSQL 数据库中。

如果 CSV 数据是重复的,则不会因为数据库表索引规则(唯一)而被插入。

$sql = "LOAD DATA LOW_PRIORITY LOCAL INFILE 
       '" . $makes_file . "' IGNORE 
       INTO TABLE make 
       FIELDS TERMINATED BY ',' 
       LINES TERMINATED BY '\n' (make, img_url)";

$link->query($sql) or die(mysqli_error($link));

由于某种原因,此过程中表的自动增量不正确。

所以我使用下面的代码来纠正这个问题。

$get_max = $link->query("SELECT max(id) as max FROM `make` LIMIT 1");
while ($r = $get_max->fetch_assoc()) {
    $link->query("ALTER TABLE  `make` AUTO_INCREMENT = " . ($r['max'] + 1)) or 
    die(mysqli_error($link));
}

所以如果有人知道:

  1. 为什么 LOAD DATA sql 中的自动增量不正确 或
  2. 如果有一种“更漂亮”的方式将自动增量设置为 max(id) +1

谢谢

最佳答案

对于 MyISAM 表,您只需将 AUTO_INCREMENT 设置为 0,MySQL 将使用当前最大值加一。

$link->query('ALTER TABLE make AUTO_INCREMENT = 0');

From the docs :

You cannot reset the counter to a value less than or equal to any that have already been used. For MyISAM, if the value is less than or equal to the maximum value currently in the AUTO_INCREMENT column, the value is reset to the current maximum plus one.

关于PHP MYSQL 将 AUTO INCREMENT 设置为 MAX + 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18645617/

相关文章:

php - 使用用户插入的变量清理 exec 命令的最佳方法

php - 如何在 symfony 中输出 xml?

php - 是否可以在 mysql 上缓存特定值?

php - mysql 查询返回空结果

php - 如何在行、列或表中存储多个值?什么是最有效率的?

php - 如何在 PHP 中对 xml 文件进行 DTD 和模式验证?

mysql - 查询后的SQL,如何获得两条记录之间的差异?

php - 使用 PHP 将行双重传递到 MySQL 数据库中

php - Symfony2 中的多个数据库

mysql - SSRS 报告表上的分组值