PHP& MySQL:使用' NOT NULL AUTO_INCREMENT'在截断的表上

时间:2014-10-06 19:08:09

标签: php mysql sql

我真的被困在这里我有这个PHP脚本:

<?php


$databasehost = "localhost"; 
$databasename = ""; 
$databasetable = ""; 
$databaseusername=""; 
$databasepassword = ""; 
$fieldseparator = ","; 
$lineseparator = "\n";
$enclosedbyquote = '"';
$csvfile = "db-core/feed/csv/csv.csv";

if(!file_exists($csvfile)) {
    die("File not found. Make sure you specified the correct path.");
}

try {
    $pdo = new PDO("mysql:host=$databasehost;dbname=$databasename", 
        $databaseusername, $databasepassword,
        array(
            PDO::MYSQL_ATTR_LOCAL_INFILE => true,
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        )
    );
} catch (PDOException $e) {
    die("database connection failed: ".$e->getMessage());
}

$pdo->exec("TRUNCATE TABLE `$databasetable`");

    $affectedRows = $pdo->exec("
    LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." REPLACE INTO TABLE `$databasetable`
    FIELDS OPTIONALLY ENCLOSED BY ".$pdo->quote($enclosedbyquote)."
     TERMINATED BY ".$pdo->quote($fieldseparator)." 
    LINES TERMINATED BY ".$pdo->quote($lineseparator)." 
    IGNORE 1 LINES");

echo "Loaded a total of $affectedRows records from this csv file.\n";

?>

因此您可以看到该脚本正在使用CSV文件截断我的表。它取代了当前MySQL表中的所有数据。

此数据用于创建列表页面,其中包括库存车辆,每行包含一辆车辆的数据。该脚本每天运行一次,以替换不再有库存的车辆。

我现在想把每个SQL行都给它自己的页面,我已经被告知我需要使用&#39; NOT NULL AUTO_INCREMENT&#39;属性&#39; id&#39;键。

然而,看到我的表截断,每次运行脚本时都不会删除ID?

我可以在脚本中添加任何内容来解决此问题吗?

由于

1 个答案:

答案 0 :(得分:1)

<击>是。截断表相当于delete from table并且记录所有记录。但是auto_increment不会再次重置为0。最后使用的auto_inc值是表格元数据的一部分,不受截断操作的影响。

如果您有0-> 100的记录,截断表格,然后添加新记录,它们将从#101开始并从那里爬升。

如果您希望在截断后重置auto_increment值,则必须执行以下操作:

TRUNCATE TABLE foo; // delete all records
ALTER TABLE foo SET auto_increment=1; // reset auto-increment to 1
INSERT ...

<击>

所以是的...结果截断确实重置了auto_increment值。绝对看似错误,因为它显然也不会在截断时处理任何级联删除。重新填充在其他地方用作外键的截断表无疑会导致错误的记录加入。