1


0

MysqlのスクリプトまたはPHPを使用してMySQLテーブルのID行を再生成します

私は私のウェブページを使用するユーザーの情報をデータベースに入力しています。 MySqlテーブルと同じ数のテーブルには、自動インクリメントされるIDパラメーターがあります。 問題は、誰かが自分のアカウントをサイトから削除すると、データベース内のシーケンスにジャンプが残ったままになるということです。

Ex.

ID   Name  PASS
1    Jhon  1234
2    Max   2233
3    Jorge 2232

マックスが出て、新しいユーザーが入った場合、これが起こります。

ID   Name  PASS
1    Jhon  1234
4    NewU  1133
3    Jorge 2232

したがって、このisuueを回避するためにデータベースから一部のボディを消去する最良の方法は何ですか、そうでない場合は、ID行のすべての内容を削除して再生成するPHPまたはMySqlスクリプトを実行することが可能です注文? どうもありがとう! 私の英語を残念に思う

3 Answer


3


AUTOINCREMENTの問題ではなく、スクリプトの問題だと思います。

  • ALMOST NEVER *は、データベースの自動インクリメント番号を再構築しますか? それは目的を破ります。

スクリプトを修正することをお勧めします。

*これはあらゆる種類の誤り*ですが、http://lists.mysql.com/mysql/208801 [自動インクリメントフィールドをリセットしますか?]

_ 通常、自動インクリメントフィールドは他のテーブルにリンクするキーとして使用されるため、既存のレコードの番号付けは頻繁に行われません。 本当にすべての番号を付け直したい場合は、レコードを新しいテーブルにコピーしますが、自動インクリメントフィールドは省略します。 元のテーブルを切り捨て、元のレコードをコピーして、自動インクリメントフィールドにNULLを指定します。 _

このアプローチを使用すると、すべての外部キー、これらの新しいIDへのリンクを手動で更新する必要があります。これは、スクリプトの修正と比較して非常に大きなタスクのようです*


1


  • 主キーをシーケンシャルに保つことはお勧めできません。*この依存関係を持たないようにスクリプトを書き直すことをお勧めします。 データの主キーを変更することは、データの整合性とパフォーマンスの両方にとって悪い考えです。


0


テーブル内の主キーを再配置することはお勧めしません。 テーブルがあるようにユーザーテーブルです。 外部キーによって別のテーブルに関連している可能性があります。 別のテーブルにユーザーテーブルのプライマリキーの参照がある場合があります。 テーブルの主キーを再配置する場合、関連するすべてのテーブルも管理する必要があります。 そのため、スクリプトのバグを修正してください。