2

LOAD DATA INFILE sql 関数を使用して、CSV ファイルから MYSQL DB にデータを挿入する PHP ファイルがあります。

CSV データが重複している場合、DB テーブルのインデックス規則 (一意) により、挿入されません。

$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 に設定する「きれいな」方法がある場合

ありがとう

4

2 に答える 2

4

MyISAM テーブルの場合、AUTO_INCREMENT を 0 に設定するだけで、MySQL は現在の最大値に 1 を加えた値を使用します。

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

ドキュメントから

カウンタを、すでに使用されている値以下の値にリセットすることはできません。MyISAM の場合、値が AUTO_INCREMENT 列の現在の最大値以下の場合、値は現在の最大値に 1 を加えた値にリセットされます。

于 2015-04-23T04:20:03.533 に答える