2012-02-25 2 views
0

私はここで興味深い問題があります。私はいくつかの他のテーブルにリンクされているMySqlデータベーステーブルを持っています。たとえば、「メイン」テーブルは、教材のセットであり、接続されたテーブルとともに表示されます。他のテーブルに接続された複数のレコードを持つMySqlデータベースのレコードを更新するにはどうすればよいですか?

  • 材料の目指すグレード。
  • 文法は、資料が最もよく使用されることを示しています。私はこれらの記録を更新し、変更することができるようにしたい材料

に関連付けられている

  • キーワード。メインレコードを変更するのは簡単ですが、接続されたレコードはどうですか?たとえば、私が最初に動詞や形容詞を教えようとする教材を持っていて、1〜4年生に最適な教材があるとしましょう。後で、私はグレード5をリストに追加し、グレード1を削除し、実際には動詞ではなく名詞や形容詞を教えるのに適していると判断します。

    グレードと文法の表を更新するにはどうすればよいでしょうか?私は残したいデータを間違って上書きしたり、削除したいデータを保持したりしたくない。特定の教材に関連するすべてのレコードを一掃して再入力するか、それとももっと効率的に更新できるようにインデックスを付けることができる他の方法がありますか?

  • 答えて

    0

    MySQLでは、テーブルを外部キーでリンクできます。つまり、これらのキーを共有する接続レコードがあります。次に、表をインスタンス化する方法に応じて、1つの表の値を更新するときにCASCADEを使用できます。あなたはこの外部キーを定義する場合、以下のようthe manual on MySQLから、CASCADEを設定することができます。

    [CONSTRAINT [symbol]] FOREIGN KEY 
    [index_name] (index_col_name, ...) 
    REFERENCES tbl_name (index_col_name,...) 
    [ON DELETE reference_option] 
    [ON UPDATE reference_option] 
    
    reference_option: 
    RESTRICT | CASCADE | SET NULL | NO ACTION 
    

    どこ:

    CASCADE:削除するか、親テーブルから行を更新し、自動的子テーブルの一致する行を削除または更新します。 ON DELETE CASCADEとON UPDATE CASCADEの両方がサポートされています。 2つの表の間に、親表または子表の同じ列で機能する複数のON UPDATE CASCADE句を定義しないでください。

    デフォルトでは、この参照オプションはNo Actionに設定されています。

    +0

    その外部キーを忘れないようにしてくださいを行うことができますので、他と呼ばれるインベントリ

    ++++++++++++++ +Vendor ++++++++++++++ +Vendor_ID +Vendor_Name ++++++++++++++ +++++++++++++++ +Inventory +++++++++++++++ +Description +endor_Name +Price +Weight +++++++++++++++ 

    は現在、両方のテーブルのVENDOR_NAMEが同じ値を持っていますInnoDBエンジンでのみ動作します。 – biziclop

    +0

    @biz本当ですか?私はそれが普遍的ではなかったことを知らなかったので、私はoracleを使用しましたが、とにかくMySQLのoracleではありませんか? – simchona

    +0

    いいえ、 'MyISAM'エンジンは非常に愚かです。絶対にACIDに準拠しておらず、外部キーもトランザクションもありません。 – biziclop

    0

    私は2つのテーブルベンダーと呼ばれるものを持っていると私は

    SELECT Vendor.Vendor_ID 
    FROM Vendor, Inventory 
    WHERE Vendor.Vendor_Name = Inventory.Vendor_Name 
    
    関連する問題