0

可能重复:
MySQL:重新排序/重置自动增量主键?

我创建了一个文件,该文件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)";
4

2 回答 2

1

您必须重置表上的自动增量,以便在您删除它们后生成编号较低的用户 ID。

ALTER TABLE mytable AUTO_INCREMENT = 3

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

于 2012-10-24T18:34:27.280 回答
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 应该代表什么,并单独使用它。然后构建您的程序来表示该抽象。

于 2012-10-24T18:37:49.540 回答