2012-05-02 21 views
0

私は2つのテーブルTABLE_1TABLE_2を持っています。別のテーブルからの値が変更されたときにテーブル内のカラムの値を更新する

TABLE_1は、IDNAME(ここで、IDは主キー)です。

TABLE_2IDDATAは、複合主キーを形成IDDATA、含まれています。

  1. 私は、彼らがTABLE_1に変更された場合TABLE_2IDを更新するSQLクエリを探しています。

  2. このテーブル構造はどのように作成できますか?

TABLE_1

ID  NAME 
100  LLL 
101  KKK 
102  JJJ 

TABLE_2

ID  DATA 
100  HHHHHHH 
100  MMMMMMM 
100  ZZZZZZZ 
101  IIIIIII 
101  FFFFFFF 
102  EEEEEEE 

あなたの助けをいただき、ありがとうございます。

答えて

1

どうしてこのようにする必要があるのか​​わかりませんが、とにかく。

これを行う1つの方法は、InnoDBストレージエンジンで使用可能な、foreign key constraintsを使用することである。

CREATE TABLE `TABLE_1` (
    `ID` int NOT NULL, 
    `NAME` varchar(255) NOT NULL, 
    PRIMARY KEY (`ID`) 
) ENGINE=InnoDB; 

CREATE TABLE `TABLE_2` (
    `ID` int(11) NOT NULL, 
    `DATA` varchar(255) NOT NULL, 
    PRIMARY KEY (`ID`,`DATA`), 
    CONSTRAINT `FK_ID` FOREIGN KEY (`ID`) 
    REFERENCES `TABLE_1` (`ID`) 
    ON UPDATE CASCADE 
    ON DELETE CASCADE 
) ENGINE=InnoDB; 

TABLE_1IDが変更されるたびに、上記の表構造がTABLE_2からすべての一致IDを更新する(ON UPDATE CASCADE) 。また、IDTABLE_1から削除すると、TABLE_2の一致するエントリもすべて削除されます(ON DELETE CASCADE)。この制約のため、INSERTが正常に完了するためには、TABLE_2IDTABLE_1に存在する必要があります。

外部キーはパフォーマンスに影響しますが、そのようなことが必要な理由を正確に知らなくても、私はよりよい解決策を提案できません。

+0

非常に役に立ちます。私は何かを期待しています。ありがとうございました...... – nikki

+0

@ user1370390:答えを受け入れるようにして、スタックオーバーフローを歓迎します。 – netcoder

関連する問題