php-複数のmysqlテーブル間で更新されたmysqlデータを保持します
mysqlに2つのテーブルがあります。最初のテーブルで値を挿入/削除するとき、値を「整列」させておくために、テーブル2で値を複製する必要があります。
table1:
id-ユーザー名
1-test_user
table2:
table1と同じIDとtable1と同じユーザー名(挿入/削除時)
複数のクエリを実行せずに、テーブル間のデータを整列させておきたい。トリガーについて読んだことがありますが、それが正しい道かどうかはわかりません。私はベニナーです。
私は2つのテーブルを言いましたが、複数のテーブルでこれを行う必要があります。
答え :
解決策:
新しいレコードをINSERT
する場合、何らかの理由で2つの挿入を実行したくない場合は、 2番目のテーブルに挿入するトリガーが機能します。 UPDATE
およびDELETE
の場合、 CASCADE
オプションを次のように確認することをお勧めします。 外部キー。テーブル間でデータの一貫性を保つことだけを行っている場合は、まさにそれがカスケードの目的です。
table2を作成するときは、次のような外部キーを追加するだけです。
FOREIGN KEY(id、username)
参考資料table1(id、username)ON UPDATE CASCADE ON DELETE CASCADE
次に、table1を変更するたびに、変更は自動的にtable2にプッシュされます。
これが機能するためのいくつかの前提条件:
答え :
解決策:
アプリケーションがtable1を変更するときに、table1にトリガーを設定して、他のテーブルに並行して変更を加えることができます。
ドキュメントについてはこちらをご覧ください: http://dev.mysql.com/doc/refman/5.0/en/trigger-syntax.html
しかし、あなたは自分のデザインについて考える必要があります。挿入と更新を行うには、複数のクエリが必要です。それらはサーバー上で「背後で」実行されるだけです。彼らはまだ時間がかかります。トリガーは物事を本当に遅くする可能性があります。
また、トリガーは少し壊れやすいです。テーブルに列を追加する場合は、トリガーを作り直す必要があります。トリガーは通常、ソース管理システムを維持するための首の痛みであり、テストするための首の大きな痛みであるため、トリガーを使用すると、アプリケーションの保守がより面倒になります。
この複製の必要性を処理するための別のアプローチを考えられますか?たとえば、ビューまたは結合を使用して、テーブルとその中の行を実際に複製せずに、必要なデータをアプリケーションプログラムに提示できますか?それを行う方法を理解すれば、長期的にははるかに幸せになるでしょう。
CREATE VIEW table2 AS
SELECT *
FROM table1;
table1の内容を含む「偽の」table2を生成します。
または、2番目のテーブルでテストユーザーのみを表示したい場合は、ビューでそれを行うことができます。たとえば、次のようになります。
CREATE VIEW table3 AS
SELECT *
FROM table1
WHERE usertype = 'test_user' ;
「バックアップ」に重複するテーブルを使用している場合、それは情報が安全であることを確認するための悪い方法です。代わりに、MySQLサーバーインスタンスをバックアップする必要があります。
正式なリレーショナルデータベースの設計原則では、データを複製する方法を学びますが、代わりにビューと結合を使用して、アプリケーションがデータを表示するために必要な方法でデータを構造化します。
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。