删除特定行后重新排列自动递增的行-Mysql

时间:2019-04-15 10:25:47

标签: php mysql

我用行ID和自动增量创建了一个表用户,但是当我删除用户SQL时,SQL并没有排列用户ID,它保持原样 就像:

Mona 1
Ahmed 15
john 17 

MY SQL 5 PHP 7.3 Apache 2

我想自动排列它们而无需手动校正

4 个答案:

答案 0 :(得分:1)

从表中删除条目不会影响AUTO_INCREMENT字段。

您必须截断表以重置AUTO_INCREMENT字段,但是此操作将删除当前表的所有数据。

OR

AUTO_INCREMENT字段设置为最后删除的行的ID,如其他注释所建议。但是,如果删除任何中间行,这可能会破坏现有记录的一致性。

答案 1 :(得分:1)

auto_increment不重用数字。如果您手动更新auto_increment,MySQL将开始重新排列磁盘上的记录。这会使您的数据库变慢,非常非常慢。

解决方案:请勿将auto_increment用于序列号标记。

auto_increment不提供顺序数字,它提供唯一数字,并且使用顺序算法来实现。出现间隙是正常现象,试图修复它会破坏数据库的性能。

TL; DR:

  • 如果需要连续的行编号,则必须手动维护数字
  • 重新排列auto_increment的值会带来巨大的损失,您的数据库速度会变慢,并且很可能破坏完整性。

别碰它。

答案 2 :(得分:0)

使用ALTER TABLE语句

说,您已删除表中的一行

DELETE FROM tmp WHERE ID = 3;

如果插入新行,MySQL会将4分配给新行的id列。但是,您可以使用以下ALTER TABLE语句将MySQL生成的数字重置为3:

ALTER TABLE tmp AUTO_INCREMENT = 3;

使用TRUNCATE TABLE语句

TRUNCATE TABLE语句从表中删除所有数据,并将自动增量值重置为零。

TRUNCATE TABLE table_name;

使用DROP TABLE和CREATE TABLE语句

类似于TRUNCATE TABLE语句,这些语句将删除表并重新创建表,因此,自动增量的值将重置为零。

DROP TABLE table_name;
CREATE TABLE table_name(...);

ref http://www.mysqltutorial.org/mysql-reset-auto-increment

答案 3 :(得分:-1)

我有一个适合我的解决方案

简单的PHP脚本重新排列数据库行(计数)

    $servername = "$sname";
    $username = "$uname";
    $password = "$pass";
    $dbname = "$dname";

   // Create connection
        $con = new mysqli($servername, $username, $password, $dbname);
      // Check connection
      if (mysqli_connect_errno())
        {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
        exit;
        }
        $conn = $con;

        $sql = "SELECT * FROM `$tname` ORDER BY `$column_name` ASC LIMIT $r_limit";
        $result=mysqli_query($conn, $sql);
              $counter='';
if ($result->num_rows > 0) {
    while($row = mysqli_fetch_array($result))                         
      {
         $counter++;         
         $id=$row["id"];

        $update_sql="UPDATE `$tname` SET `$column_name`='$counter' WHERE `id`='$id'";
        
      if ($conn->query($update_sql) === TRUE) {
         $Status="updated successfully";
      }else {
         $Status="Error: " . $conn->error;
      }

    }
}

点击此处获取完整脚本https://github.com/tushargabhane3?tab=projects

此脚本将按1的顺序排列id列

我们仅在文本框中输入一些参数,例如服务器名,数据库名,表等。

此后,此脚本重新排列任何列,并以表格格式显示所有输出。