Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 是否有一种替代方法来更改表自动_增量=1?_Mysql_Auto Increment - Fatal编程技术网

Mysql 是否有一种替代方法来更改表自动_增量=1?

Mysql 是否有一种替代方法来更改表自动_增量=1?,mysql,auto-increment,Mysql,Auto Increment,在阅读了这里的讨论()和ViralPatel的帖子()以及其他一些帖子之后,我发现altertable tablename AUTO_INCREMENT=1的问题在于它仍然无法“重新启动”id(这是一个INT主键)。我自己也尝试过,但id只是从表中最后一个现有id开始不断递增。我希望避免显式声明数据库的id。特别是这句话: 请注意,不能将计数器重置为小于或等于任何已使用的值。对于MyISAM,如果该值小于或等于“自动增量”列中当前的最大值,则该值将重置为当前最大值加1。对于InnoDB,如果该值

在阅读了这里的讨论()和ViralPatel的帖子()以及其他一些帖子之后,我发现
altertable tablename AUTO_INCREMENT=1
的问题在于它仍然无法“重新启动”id(这是一个INT主键)。我自己也尝试过,但id只是从表中最后一个现有id开始不断递增。我希望避免显式声明数据库的id。特别是这句话:

请注意,不能将计数器重置为小于或等于任何已使用的值。对于MyISAM,如果该值小于或等于“自动增量”列中当前的最大值,则该值将重置为当前最大值加1。对于InnoDB,如果该值小于列中的当前最大值,则不会发生错误,并且不会更改当前序列值

我提出了这个函数,但我担心这将是一件坏事,因为它必须在返回新id之前检索整个id列

function id_from_one($table, $id_column_name) {
    include 'includes/dbh.inc.php'; // This just creates the $conn variable and connects to the database.
    $counter = 1;
    $sql     = "SELECT $id_column FROM $table;";
    $result  = $conn->query($sql);
    if ($result) {
        while ($row = $result->fetch_assoc()) {
            if ($counter == $row[$id_column_name]) { $counter++; }
            else { break; }
        }
    }
    $conn->close();
    return $counter;
}

我理解正确吗?还是真的有办法做到这一点?MySQL为什么要这样做?

如果此列的值对您来说很重要,那么它不应该是一个id,也不应该是一个AI。auto_inc背后的整个想法是它对每个记录都是唯一的,MySQL将“调整”它以避免与现有值重叠的原因。如果你不想要这个功能,那么汽车公司可能是个糟糕的选择。