0

mySQLにテーブルBusinessがあるとします。

各「ビジネス」のIDは、タイトルと場所の関数です。プログラミングがはるかに簡単になります。

また、2つの同一の事業などを統合することもよくあります。

ある日、ビジネスのタイトルが変更され、IDを変更したいとします。私がめったにしない操作。

他の多くの表はそのビジネスを示しています。

だから私は何をすべきですか?

新しいIDを作成してから、元のビジネスを指すすべての関係を新しいIDに変更する必要がありますか?

これをより速く行うmysqlコマンドはありますか?

サンプルのvb.netコードはありますか?

4

1 に答える 1

1

各テーブルで使用されているDBエンジンとその設計によっては、テーブルに外部キーと制約を構成している場合は、何もする必要がない場合があります。

最初に行うことは、リンクされたテーブルの構造を確認することです。これを行うにはshow create table xyz、MySQLセッション内で実行し、以下を確認します。

  1. InnoDBエンジンが使用されている場合
  2. テーブルには外部キーと制約が存在します

(外部キーは、InnoDBエンジンを使用する場合にのみ実際に使用されます。他のエンジンで要求することはできますが、何も実行されません。)

InnoDBエンジンを使用していて、制約が設定されている場合は、次のようなものを探しています。

CONTRAINT `FK_businessID` FOREIGN KEY(`businessID`) REFERENCES `Business` (`ID`) 
    ON DELETE CASCADE ON UPDATE CASCADE

テーブル定義で。このようなものが表示された場合、ビジネステーブルのIDを安全に変更でき、他のすべてのリンクされたテーブルもそれに続くはずです。

外部キーを持っていないがInnoDBエンジン使用している場合は、単一のトランザクション内のすべてのテーブルの情報を変更して、制御外の変更(接続の喪失、クエリエラーなど)で問題が発生した場合に、ロールバックできます。

最後に、InnoDBエンジンを使用していない場合は、幸運を祈ります。基本的に「オンザフライ」でレコードを変更するリスクを冒す必要があります。主な選択肢は(個人的な好みの順に)次のとおりです。

  1. 新しいキーを作成し、テーブルで複数の更新を使用し、それらがすべて機能し、現在データを使用している人に影響を与えないことを願っています
  2. 新しいIDで新しいレコードを作成し、最初のレコードから新しいレコードにすべての情報をコピーしてから、リンクされたテーブルで複数の更新を使用してから、元のレコードを削除します。すべてが機能し、現在データを使用しているユーザーに影響を与えないことを期待します。
  3. 新しいIDで新しいレコードを作成し、リンクされたテーブル内のすべてのレコードを複製し、それを確認してから、最初のレコードを削除します
  4. 魔法を使う

明らかに、上記のすべてで、決心する前にたくさんのテストとバックアップを行ってください(そして私はたくさん話している)。そして、最小数の顧客がDBを使用しているときにそれを行います。言い換えれば、一晩。

于 2012-05-23T10:42:42.500 に答える