表中的 MySQL ID 编号


MySQL id numbering in table

假设我有一个链接到数据库的表,如下所示:http://www.falkencreative.com/forum/records/view.php

如何使当我删除记录然后添加新记录时,新记录将替换以前删除的记录,并且具有以前删除的 ID 号而不是下一个 ID?

例如

  1. 绿

单击按钮删除绿色。

单击按钮添加新颜色。输入橙色

就目前而言,我正在处理的是:1.红色2.蓝色4. 橙色(什么应该将其设置为 3?

就桌子设置而言,这可能是一件简单的事情,但我不知道该怎么做,而且时间紧迫。谁能指导我应该做什么?

您可能有 2 个选项。更新之前"绿色"值所在的同一行。即:

mysql_query("UPDATE table_name SET color = 'orange' WHERE ID = '3'");

mysql_query("UPDATE table_name SET color = 'orange' WHERE color = 'green'");

无论您的指定者是什么。

从MySql的角度来看,这应该是最简单的方法。或者,您可以按照最初概述的方式删除它,然后使用 mysql_query("插入到 ....但随后需要重置 MySql PK UID,即:

mysql_query("ALTER TABLE table_name AUTO_INCREMENT = 1");

这将删除您使用的 PK ID 并重新编号所有行。 还是有更简单的解决方案?

不,当您删除数据库行时,如果该列的AUTO_INCREMENT处于活动状态,它将从序列中获取值。如果删除 3,则序列始终从 3+1 开始。例如,您可以从 php myadmin 查看''设置自动增量值。我不知道你在用什么DBMS,但是使用oracle你可以操纵序列。

所以你有各种各样的方法。

  1. 复杂:插入''删除时,使用触发器更新序列
  2. 您使用 3 列:idIdToShowValue

id现在是一样的,你可以把它与Autoinc一起使用。 idToShow也是你展示的。插入时,您可以对表中存在的行进行计数(有多种方法)。

希望对您有所帮助。

您的问题不在于数据库 ID,而在于不了解 ID 和行号之间的区别。它们彼此无关。只需简单地输出循环计数器("$i")而不是 ID。

<?php
for ($i = 1; $i <= foo(); $i++) {
    print "<tr><td>{$i}</td><td>...</td></tr>'n";
}
?>

我认为您想更新记录,而不是删除旧记录并插入新记录。

编辑:

如果要插入新记录并为其分配下一个连续 ID,请使用非auto_increment列,并在添加新记录时执行此操作:

INSERT INTO myTable (id, ...) VALUES ( (SELECT MAX(id) + 1 FROM myTable), ...)

我没有方便的数据库来测试这一点,但我认为它会起作用。 但我不确定当桌子是空的时会发生什么。此外,这可能会产生争用条件。