ホームページ  >  に質問  >  本文

インデックスが変更されたときに、あるテーブルから別のテーブルに行をコピーする SQL 操作

ステータスの説明

データベース DB1DB2 という 2 つのデータベースがあり、フィールド Author.ID および # を持つ同じテーブル Author があります。 ##著者.著者名

DB1.AuthorAuthor.ID フィールド には AUTO_INCRMENT がありますが、DB2.Author には # がありません。 ## AUTO_INCRMENT 。DB1 データの正確さに依存するためです。 両方のテーブルには、

Author.ID

に PRIMARY インデックスがあり、Author.AuthorName に一意のインデックスがあります。

DB2.Author

には、DB1.Author からコピーされた行があります。 どちらのデータベースも

MariaDB

バージョン 10.6.7 を使用します。 ######質問######


DB1

管理者は、DB1.Author テーブル内のいくつかのエントリを削除し、インデックス番号にギャップがなくなるように

インデックスを並べ替えました。これは、次のような可能性があることを意味します:

ID 著者名

12B3Cその後、AuthorName'B' である行を削除しました。
###1つ###
:

ID 著者名

13CID著者名
###1つ###
彼らは最終的にギャップがなくなるようにインデックスを更新しました (3-C が 2-C に変更されました):

1 ###1つ### 2CDB2.Author# を削除せずに、行の更新ステータスを から DB2.Author 内のすべて。 エフェクトのデータが失われないようにします。 最良の方法は何ですか?
次に、DB1.Author
にコピーする方法を見つける必要があります。 # # テーブル CASCADE

私のショット これは私がやったことですが、重複キーの場合は別の重複キーを作成しようとするため、明らかに機能しません(重複 ID 2 は ' C の重複値を挿入しようとします) ' すでに ID

3):

に存在するため リーリー


他の方法はありますか?

SQL クエリ ソリューション以外に、別のデータベースでデータが変更されたときに、あるデータベースのテーブル データを自動的に更新する方法はありますか?一部のテーブルのみをコピーする必要があり、他のリンクされたテーブルはコピーする必要はありません。

P粉459440991P粉459440991186日前307

全員に返信(1)返信します

  • P粉296080076

    P粉2960800762024-03-31 00:34:23

    tl;dr、あなたの問題はデータベースマネージャーです。解決策は、データを以前の状態に復元することで受けた損害を元に戻すことです。行を削除するだけです。主キーの更新が機能しません。

    解決策を作成したり、それを解決することで自分の間違いを検証したりしないでください。そうすると、同じことが再び起こる可能性が高くなります。


    完全な答え。

    実際の問題は、データベースの鉄則に違反している「データベース管理者」です。 サロゲート キーの値を決して更新しないでください。

    あなたの場合、ID 列値のギャップはいずれにしても問題にならないため、状況はさらに悲劇的です。ギャップが重要な場合、状況はさらに悪化します。説明させてください...

    著者名はあなたの実際の識別子です。これは一意の制約があるためわかります。

    ID 列は サロゲート キー で、自動インクリメント整数として実装するのが最も便利ですが、サロゲート キーが乱数 (一意の) 数値である場合も、サロゲート キーは正常に機能します。ギャップ、あるいは値の選択自体は、代理キーの有効性とは何の関係もありません。

    返事
    0
  • キャンセル返事