私はあるMySQL DBから別のMySQL DBにアプリケーションデータを移行しようとしています(もちろん別のスキーマを使用しています)、古いDBから新しいDBへの関係を維持しようとすると問題に陥ります。MySQLデータを移行して新しいFKを検索しますか?
構造
基本的な考え方は、異なるグループ/部門がこれらのイベントのためのイベントやシフトを作成することができますイベント管理システム、です。私は(R)
*Old DB*
Departments (PK Dept_ID)
Events (PK Event_ID, FK Dept_ID)
Shifts (PK Shift_ID, FK Event_ID, FK Dept_ID)
*New DB*
departments (PK id)
events (PK id, FK department_id)
shifts (PK id, FK event_id)
移行部門とイベント物事をシンプルに保つために、関連する列を示しています
DB構造
はINSERT...SELECT
クエリと非常に簡単でした。シフトのために、よく...これは私がこれまで持っているものです:私は関係連鎖の頂点で開始し、(DEPT_IDが@oldDeptId変数に設定されている)1つの部門を移行し
INSERT INTO newDB.shifts (event_id, start, end, notes)
SELECT
(SELECT C.id FROM newDB.events C INNER JOIN oldDB.events E
ON E.Title = C.title AND E.StartTime = C.start_time AND E.Location = C.location),
* title, start, end combination is unique *
Start, End, Notes FROM oldDB.shifts S
WHERE S.Dept_ID = @oldDeptId;
、その後、すべてのイベントを移行類似のINSERT...SELECT
クエリを使用してこの部門からさて、私は古いシフトデータをコピーするときに、更新されたnewDB.events.id
の値と一致するようにnewDB.shifts.event_id
の値が必要です。この値は、オートインクリメント値として割り当てられて、関係を維持します。
サブクエリは、oldDB.Event.Event_ID
と一致するすべてnewDB.event.id
を返しますが、サブクエリは1つの結果しか返すことができません(MySQLエラー1242)。
私は適切な道にいるのですか、これを行うには良い方法がありますか?ありがとう!
クエリには、テーブル定義に表示されない「start」などの列が含まれているのはなぜですか?新しい 'shiftts'テーブルに挿入される' event_id'値を決定するために使用しようとしているロジックについて詳しく説明できますか? –
@TimBiegeleisen私は本当に関係の感覚を与えることを試みる構造の主要な/外来のキーを含んでいました。各テーブルには、私が重要だとは思わなかったいくつかの他の列(タイトル、アドレス、開始/終了時刻など)があります。私は最後の段落で何をしようとしているのかを広げました。 – Jason