4

私はウェブページを作成しています。このWebページは、ユーザーのアクションに基づいてデータをMySQLデータベースに保存します。データベースには多くの行があります。行の主キーは列rowIDであり、行に順番に番号を付けます(1、2、3、4 ....など)。ユーザーには、行を削除するオプションがあります。問題は、ユーザーが最後の行以外の行を削除した場合です。rowIDにスキップがあります。たとえば、1、2、3、4、5の5つの行があり、ユーザーが3番目の行を削除したとします。これで、rowID列のデータは1、2、4、5になります。これを効率的に説明するために、MySQLまたはPHPに組み込み関数がすでにあるかどうかを知りたいと思いました。

これを取り除くために私が知っている唯一の方法は、基本的に行をループしてrowIDを更新することです。ただし、行数が多いと時間的には非常にコストがかかると思います。

また、新しい行が作成されている場合にrowIDを自動インクリメントする方法も知りたいと思いました。現在、現在最大のrowNumberを見つけて、現在最大のrowNumber+1の行を挿入するコードがあります。

4

2 に答える 2

3

重要ではないので、ありません。連続したシーケンスである主キーに依存するべきではありません。その唯一の機能は、キーが行の一意の識別子であることを確認することです。それを超えると、数字には意味がありません。

于 2013-03-12T17:54:39.557 に答える
2

あなたはそれをしたくありません。主キーは一意の識別子であり、一度作成すると変更されないようにする必要があります。あなたが探しているのはネストされたセットです。left_idとright_idを追跡するフィールドを追加し、必要に応じて手動で更新します。Doctrine2には、これを処理するライブラリがあります。

どうしてもこの変更を行う必要がある場合は、alter tableを使用してフィールドを削除してから、再度追加することができます。

于 2013-03-12T17:52:40.557 に答える