5

C#でMYSQLデータベースを使用するアプリケーションを作成しています。行を削除して、テーブルのidの自動インクリメント値を更新したい。たとえば、idとstationの2つの列を持つテーブルがあり、テーブルはステーションリストです。このようなもの

idステーション
1pt12
pt2
3 pt3

2番目の行を削除すると、テーブルを削除した後、次のようになります。

idステーション
1pt13
pt3

テーブルのIDを更新する方法はありますか?この例では、値3の代わりに3行目のIDの値が2になっていますか?前もって感謝します!

4

3 に答える 3

5

行が削除されたときに特別なことをしないことをお勧めします。はい、IDにギャップがありますが、なぜ気にしますか? それはただのIDです。

id_station の値を変更する場合は、id_station フィールドを持つすべてのテーブルの値も更新する必要があります。不要な更新が発生します。

于 2012-08-16T14:48:20.263 に答える
5

自動インクリメント列は、定義上、手動で変更しないでください。
他のテーブルがこの ID (3) を外部キーとして使用して、このテーブル内のそのレコードを参照するとどうなりますか? そのテーブルはそれに応じて変更する必要があります。
(考えてみてください。あなたの例では単純ですが、max(ID) が 100000 のテーブルで ID = 2 を削除するとどうなりますか?メイン テーブルと参照テーブルの更新はいくつありますか?)

最終的には、ナンバリングにギャップがあっても実際の問題はありません。

于 2012-08-16T14:50:01.563 に答える
2

id他の行の列の値を変更する唯一の方法は、UPDATE ステートメントを使用することです。あなたが望むものを達成するための組み込みのメカニズムはありません。

ここでの他の回答に同意します。id通常、行が削除されたときに他の行の列の値を変更することはありません。通常、その id 列は主キーであり、理想的には、その主キーの値は不変です (一度割り当てられると変更されません)。変更された場合は、それへの参照も変更する必要があります。(外部キーの ON UPDATE CASCADE は、外部キーをサポートするが MyISAM をサポートしない InnoDB などのストレージ エンジンの場合、変更を子テーブルに伝播します。

基本的に、id値を変更すると、解決するよりもはるかに多くの問題が発生します。

行が削除されたときに他の行の列の値を変更する「自動」メカニズムはありません。

そうは言っても、開発サイクル中に「静的な」データがあり、id 値を制御したくて、値を変更したことがありidます。ただし、これは管理作業であり、アプリケーションによって実行される機能ではありません。

于 2012-08-16T16:47:11.173 に答える