我用行ID和自动增量创建了一个表用户,但是当我删除用户SQL时,SQL并没有排列用户ID,它保持原样 就像:
Mona 1
Ahmed 15
john 17
MY SQL 5 PHP 7.3 Apache 2
我想自动排列它们而无需手动校正
答案 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(...);
答案 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列
我们仅在文本框中输入一些参数,例如服务器名,数据库名,表等。
此后,此脚本重新排列任何列,并以表格格式显示所有输出。