用户ID的递增不正确

时间:2012-10-24 18:30:47

标签: php mysql

  

可能重复:
  MySQL: Reorder/Reset auto increment primary key?

我创建了一个名为register.php的文件,它记录每个用户的用户ID。我的搭档创建了自己的版本。在我们的数据库中,默认情况下我是用户ID 1,他是用户ID 2.我们都有4个额外的用户。我遇到的问题是我从我的数据库中删除了所有用户,但每当新成员注册到我的网站时,他们的用户ID是7和更高 - 而不是2(这是我的正确)。任何人都可以帮我解决这个问题吗?

我缩短的数据库:

    CREATE TABLE `users` (
   `user_id` int(100) not null auto_increment,
   `user_name` varchar(50) not null,
   `user_pass` varchar(100) not null,
   `user_email` varchar(255) not null,
   PRIMARY KEY (`user_id`),
   UNIQUE KEY (`user_name`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8_unicode_ci AUTO_INCREMENT=8;

现在这里是Sql:

$sql = "INSERT INTO
users(user_name, user_pass, user_email , user_date , user_level)
VALUES('" . mysql_real_escape_string($_POST['user_name']) . "',
'" . $ip . "',
'" . sha1($_POST['user_pass']) . "',
'" . mysql_real_escape_string($_POST['user_email']) . "',
NOW(),
0)";

2 个答案:

答案 0 :(得分:1)

您必须重置表格上的自动增量,因此在删除后会生成编号较小的用户ID。

ALTER TABLE mytable AUTO_INCREMENT = 3

http://www.electrictoolbox.com/reset-auto-increment-value-mysql/

答案 1 :(得分:1)

定义表时,您要声明以下字段以自动递增:

`user_id` int(100) not null auto_increment,

这意味着数据库将保留其最后一次增量的独立值。这可确保每个新行都具有唯一的user_id。

您可以使用以下SQL将其重置为某个数字:

ALTER TABLE mytable AUTO_INCREMENT = {the number you want};

但是,如果删除一些但不是所有用户,这将导致问题。如果您有1-7用户,删除用户ID 5,并将自动增量重置为5,并添加三个用户,您将拥有1-7的用户,但您将拥有6和7的重复项。这不是很好对于一个独特的索引。

通常,唯一ID不是面向用户的,因此实际值无关紧要。在此解决方案中,您为用户提供了另一个面向用户的标识符。这可以是散列数,用户名或其他完全(如图片)。用户ID只是一个保持数据完整性的钩子。

另一种方法是,当您插入新用户时,您将在数据库中扫描第一个未使用的号码。这虽然计算成本很高,但其好处尚不清楚。

对于最干净的代码,请准确确定user_id应该代表什么,并单独使用它。然后构建您的程序来表示该抽象。