各テーブルで使用されているDBエンジンとその設計によっては、テーブルに外部キーと制約を構成している場合は、何もする必要がない場合があります。
最初に行うことは、リンクされたテーブルの構造を確認することです。これを行うにはshow create table xyz
、MySQLセッション内で実行し、以下を確認します。
- InnoDBエンジンが使用されている場合
- テーブルには外部キーと制約が存在します
(外部キーは、InnoDBエンジンを使用する場合にのみ実際に使用されます。他のエンジンで要求することはできますが、何も実行されません。)
InnoDBエンジンを使用していて、制約が設定されている場合は、次のようなものを探しています。
CONTRAINT `FK_businessID` FOREIGN KEY(`businessID`) REFERENCES `Business` (`ID`)
ON DELETE CASCADE ON UPDATE CASCADE
テーブル定義で。このようなものが表示された場合は、ビジネステーブルのIDを安全に変更でき、他のすべてのリンクされたテーブルもそれに続くはずです。
外部キーを持っていないがInnoDBエンジンを使用している場合は、単一のトランザクション内のすべてのテーブルの情報を変更して、制御外の変更(接続の喪失、クエリエラーなど)で問題が発生した場合に、ロールバックできます。
最後に、InnoDBエンジンを使用していない場合は、幸運を祈ります。基本的に「オンザフライ」でレコードを変更するリスクを冒す必要があります。主な選択肢は(個人的な好みの順に)次のとおりです。
- 新しいキーを作成し、テーブルで複数の更新を使用し、それらがすべて機能し、現在データを使用している人に影響を与えないことを願っています
- 新しいIDで新しいレコードを作成し、最初のレコードから新しいレコードにすべての情報をコピーしてから、リンクされたテーブルで複数の更新を使用してから、元のレコードを削除します。すべてが機能し、現在データを使用しているユーザーに影響を与えないことを期待します。
- 新しいIDで新しいレコードを作成し、リンクされたテーブル内のすべてのレコードを複製し、それを確認してから、最初のレコードを削除します
- 魔法を使う
明らかに、上記のすべてで、決心する前にたくさんのテストとバックアップを行ってください(そして私はたくさん話している)。そして、最小数の顧客がDBを使用しているときにそれを行います。言い換えれば、一晩。