2

这是一个奇怪的问题。

我有一个users第一列作为ID(PRIMARY,AUTO_INCREMENT)的普通表。它工作正常。在检查我的表单是否有效时,我插入了一些随机数据(不是通过表格,而是通过表单本身)。然后我删除了这些条目。现在,显然没有。表的行数减少但ID值保留。所以在某种程度上,ID表中的最后一个是567,不是。行数是540. (差距是27

但是,今天我重新检查了表格的条目,差距已经增加到89. (最后ID是 1809,行数是1720)。这怎么可能?之后,当我为其他用户打开表单时,我从未删除任何其他条目。

我的表结构USERS

ID-->PRIMARY,A_I
EMAIL-->VARCHAR(60),UNIQUE
NAME-->VARCHAR(60)

用户注册后,他/她会ID通过所选电子邮件 ID 上的邮件收到有关他/她的通知。

在以其他形式申请为活动预留座位时,用户必须输入他/她的团队成员的 ID。我检查在USERS表中输入的 ID,从那里检索结果并将其添加到另一个表中,例如EVENTS。php代码的形式为:

   $members=array containing the IDs entered by the user of his/her team members.
        $result_rows = mysql_query("SELECT * FROM users");
                $num_rows = mysql_num_rows($result_rows);
                foreach($members as $key=>$value){
                    if ($value>($num_rows+89))
                    $err[]="Error. One of the ID you entered doesnot exist";
}
            }
4

1 回答 1

0

如何从您的系统中删除用户?

Auto_increment 字段就是这样做的——对于每个新行,它们 +1。删除也没关系——它们只是相应地增加。

因此,如果您添加 John Doe,然后删除该记录并读取它,您的新 ID 为 2——ID 1 消失了。然后你添加 Jane Doe,删除它,读取它,新的 Id 是 4,但表中只有 2 条记录。

因此,在您的情况下,当 ID 为 567 时,必须删除 89 条用户记录才能到达 1809。

或者,根据您的表结构,另一个可能的选项是 INSERT IGNORE - 例如,如果您尝试插入重复的用户 John Doe 两次,并且您有唯一键约束,即使没有新的 id 也会自动递增将添加记录。

最后一点——这真的不重要。让数据库处理 ID。如果你真的需要1、2、3等。方法,您需要自己构建。

于 2013-02-15T05:57:14.453 回答