0

簡単な質問:

ゲームのリストを含むスポーツ リーグ データベースがあります (40 程度としましょう)。スプレッドシートからスケジュール全体をインポートすると、各ゲームには主キーとして ID 番号が自動的に割り当てられます。この (ユーザーには) 見えない主キーのおかげで、ゲームは降順で Web ページに表示されます。以下に例を示します:リーグ スケジュール

よく働く。唯一の問題は、ゲームが再スケジュールされて後日に移動されたり、新しいゲームが追加されて既存のスケジュールに挿入されなければならない場合があることです. この時点まで、影響を受ける各行の ID を (PhpMyAdmin を使用して) 手動で編集して変更を説明する必要がありましたが、これは非常に面倒で時間がかかる可能性があります。

私が本当にやりたいことは、その場で主キーの値を再調整するようにテーブルを設定することです。つまり、テーブルの 5 行目に真新しいゲームを挿入すると、それ以降のすべてのゲームが自動的に再調整されます (ID 5 は 6 になり、ID 6 は 7 になるなど)。

これを行うためにテーブルを設定する方法はありますか、それとも同じことを達成するために使用できる特定の SQL コマンドはありますか? これがすでにさまざまな方法で何度も尋ねられている場合はお詫び申し上げます。ありとあらゆるフィードバックをお待ちしております。

4

2 に答える 2

2

そのために PRIMARY KEY を使用しないでください。ではなくsort、通常の のような特別な列を追加します。どちらかである必要はありません。実数を使用できます。このようにして、いつでもスケジュールの 2 つの行の間に新しい行を挿入できます。INDEXUNIQUEINT

于 2013-09-23T19:14:38.273 に答える
1

いいえ、自動インクリメントは一意である必要がありますが、特定の順序または連続している必要はありません。自動インクリメントが単調に増加するという事実は、その実装の偶然によるものです。時系列の値に依存しないでください。

値を調整しようとするのは手動で扱いにくいだけでなく、競合状態のリスクがあるか、多くの行をロックする必要があります。ID 5 の行を挿入しても、テーブルに ID 5 より大きい行が 10 億ある場合はどうなるでしょうか。

ゲーム 42 に行く必要があることを知らせる電子メールを受け取ったユーザーは、最終的に間違ったゲームに行く可能性があるため、主キー列の番号を付け直すリスクもあります。

行を特定の順序 (時系列など) で表示する必要がある場合は、自動インクリメント列ではなく DATE 列を使用してください。

于 2013-09-23T19:06:08.493 に答える