ステータスの説明
データベース DB1
と DB2
という 2 つのデータベースがあり、フィールド Author.ID
および # を持つ同じテーブル Author
があります。 ##著者.著者名。
DB1.Author の
Author.ID フィールド
には AUTO_INCRMENT がありますが、DB2.Author
には # がありません。 ## AUTO_INCRMENT 。DB1 データの正確さに依存するためです。
両方のテーブルには、
に PRIMARY インデックスがあり、Author.AuthorName
に一意のインデックスがあります。
には、DB1.Author
からコピーされた行があります。
どちらのデータベースも
バージョン 10.6.7 を使用します。 ######質問######
管理者は、DB1.Author テーブル内のいくつかのエントリを削除し、インデックス番号にギャップがなくなるように
インデックスを並べ替えました。これは、次のような可能性があることを意味します:
ID
著者名
1 | ###1つ### |
---|---|
3 | |
が | 'B': | である行を削除しました。
ID
著者名
###1つ### | 3 |
---|---|
彼らは最終的にギャップがなくなるようにインデックスを更新しました (3-C が 2-C に変更されました): | |
ID | 著者名 |
2 | C |
---|---|
次に、 | DB2.Author# を削除せずに、行の更新ステータスをDB1.Author | から
にコピーする方法を見つける必要があります。 # # テーブル | 内のすべて。CASCADE | エフェクトのデータが失われないようにします。
私のショット
これは私がやったことですが、重複キーの場合は別の重複キーを作成しようとするため、明らかに機能しません(重複
ID
2 は ' C の重複値を挿入しようとします) ' すでに
ID
に存在するため リーリー
他の方法はありますか?
SQL クエリ ソリューション以外に、別のデータベースでデータが変更されたときに、あるデータベースのテーブル データを自動的に更新する方法はありますか?一部のテーブルのみをコピーする必要があり、他のリンクされたテーブルはコピーする必要はありません。
tl;dr、あなたの問題はデータベースマネージャーです。解決策は、データを以前の状態に復元することで受けた損害を元に戻すことです。行を削除するだけです。主キーの更新が機能しません。
解決策を作成したり、それを解決することで自分の間違いを検証したりしないでください。そうすると、同じことが再び起こる可能性が高くなります。
完全な答え。
実際の問題は、データベースの鉄則に違反している「データベース管理者」です。 サロゲート キーの値を決して更新しないでください。
あなたの場合、ID 列値のギャップはいずれにしても問題にならないため、状況はさらに悲劇的です。ギャップが重要な場合、状況はさらに悪化します。説明させてください...
著者名はあなたの実際の識別子です。これは一意の制約があるためわかります。
ID 列は サロゲート キー で、自動インクリメント整数として実装するのが最も便利ですが、サロゲート キーが乱数 (一意の) 数値である場合も、サロゲート キーは正常に機能します。ギャップ、あるいは値の選択自体は、代理キーの有効性とは何の関係もありません。