0

重複の可能性:
MySQL: 自動インクリメント主キーを並べ替え/リセットしますか?

register.php各ユーザーのユーザー ID を記録するというファイルを作成しました。私のパートナーは独自のバージョンを作成しました。データベース内では、デフォルトで私がユーザー ID 1 で、彼がユーザー ID 2 です。2 人とも 4 人の追加ユーザーがいます。私が抱えている問題は、データベースからすべてのユーザーを削除したことですが、新しいメンバーが私のサイトに登録するたびに、そのユーザー ID は 2 (私の直後) ではなく 7 以上です。誰でもこれを解決するのを手伝ってもらえますか?

私の短縮データベース:

    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 にリセットし、3 人のユーザーを追加すると、ユーザー 1 ~ 7 になりますが、6 と 7 の重複があります。これは良くありません。ユニークなインデックスのために。

通常、一意の ID はユーザー向けではないため、実際の値は重要ではありません。このソリューションでは、代替のユーザー向け識別子をユーザーに提供します。これは、ハッシュ化された番号、ユーザー名、または完全に別のもの (画像など) にすることができます。ユーザー ID は、データの整合性を維持するための単なるフックとして残されています。

別の方法は、新しいユーザーを挿入するときに、データベースをスキャンして最初の未使用の番号を探すことです。ただし、これは計算コストが高く、利点は不明です。

最もクリーンなコードを作成するには、user_id が何を表すかを正確に決定し、それを単独で使用します。次に、その抽象化を表すプログラムを作成します。

于 2012-10-24T18:37:49.540 に答える