2012-02-24 15 views
0

Excelからインポートした2つの大きなmysqlテーブルを想像してください。mysqlテーブル同期

表1には、SNameIDフィールドと、SNameID(Age、Size)を記述するその他のフィールドがあります。

SNameID年齢サイズ

表2は、フィールドTeacherIDを有し、各教師のために/学生/ sがSNameIDと記述するフィールド(年齢、サイズ)であるとされています。

TeacherID SNameID年齢サイズ

考え方は次のとおりです。表2はTeacherIDデータと関係情報を持っている:これは彼の学生です。それはかなり悪いアーキテクチャです...しかし、私は両方のテーブルを使用しなければなりません。

いくつかの変更は、テーブルのいずれかで年齢および/またはサイズで発生したとき、私はmysqlは自動的SNameIDに応じて他のテーブルを更新することができますか?、私に教えてください

私はちょうどそれを把握...と私のテーブルの多くでその問題...私は必要なのは、あるいは何を読むためのヒントであることはできません - 私は私たちのその後それを把握することができますし、解決策を掲載しますここでも。

+0

あなたはトリガーを使用しようとしたしましたか?他のテーブルで同じデータを更新するために、私はいくつかのデータを更新するとき、私は更新クエリを実行し、いくつかの他のクエリ - – Pentium10

+0

は最後に、私はそれを苦労していました。それは正常に動作します。 – Sergiu

答えて

0

セットアップTRIGGER AFTER UPDATEが自動的にデータの変更同期することができます。

DELIMITER | 
DROP TRIGGER IF EXISTS `teacher_update`| 
CREATE TRIGGER `teacher_update` AFTER UPDATE ON `teacher` 
FOR EACH ROW 
BEGIN 
    UPDATE student s SET s.Age = NEW.Age, s.Size = NEW.Size WHERE s.SNameID = NEW.SNameID; 
END; 
| 
DROP TRIGGER IF EXISTS `student_update`| 
CREATE TRIGGER `student_update` AFTER UPDATE ON `student` 
FOR EACH ROW 
BEGIN 
    UPDATE teacher t SET t.Age = NEW.Age, t.Size = NEW.Size WHERE t.SNameID = NEW.SNameID; 
END; 
| 
delimiter; 

をしかし、何が本当にやるべきことは、このデータベースの設計を正規化です。

teacherテーブルからAgeSizeフィールドをドロップし、あなたが選択した場合、外部キーを使用してstudentテーブルから情報を取得します。

SELECT t.*, s.* FROM teacher t LEFT JOIN student s ON t.SNameID = s.SNameID 
+0

Danke Kaii!それはLEFT JOINです! – Sergiu

+0

@SergiuはStackOverflowへようこそ!あなたは答えを好きで、私はあなたを助けることができた場合は、それを受け入れることを答えの横にチェックマークをクリックしてください。 – Kaii

関連する問題