mysql innodb の外部キー参照
-
21-09-2019 - |
質問
簡単に言えば:2つの列を持つテーブルがあります。1 つはユーザー名、もう 1 つはニックネームです。2 つの列がある別のテーブルがあります。1 つはユーザー名、もう 1 つは countNicknames です。
countNicknames に各ユーザーが持つニックネームの数を含めたいと考えています (新しいニックネームを table1 に挿入するたびに、table2.countNicknames の値が自動的に更新されます)。
最初のテーブルを参照するために 2 番目のテーブルを構築する方法を書き留めていただけますか?
解決
あなたが値を必要とするとき理由だけカウントしない?
他のヒント
私はcountNicknamesは、ニックネームの数を含むようにする各ユーザーが持っている(と私はTABLE1に新しいニックネームを挿入したときに、table2.countNicknames下の値が自動的に更新されます。
このビューは、何をするか効果的である。
CREATE OR REPLACE VIEW user_nickname_count AS
SELECT t.username,
COUNT(*) 'countNicknames'
FROM TABLE t
GROUP BY t.username
ビューのルックスの表のように、必要に応じて、あなたはそれに参加しCAHなります。そして唯一のオーバーヘッド、それが効果的にちょうどSELECTクエリが実行されているということである - 。値は、むしろ、セットアップのトリガーになるよりも、オンデマンドで計算されます。
ビューの詳細は、情報については、マニュアルを参照してくださいA>。
まあ、@Lasseの提案の方が良いですが...がある 他に2人 別のオプション...
MySQL にはトリガーがありますか?存在する場合は、最初のテーブルにレコードが挿入、更新、削除されるたびに 2 番目のテーブルの CountNickNames 属性を更新 (または必要に応じて挿入または削除) する Insert、Update、Delete トリガーを最初のテーブルに追加します。 。
nicknamecounttableでnicknamecounttrigを作成します。)firstTable where where name = nct.name)from nicknamecounttable nct in in in(挿入されたユニオンからの個別の名前を選択削除から削除された別個の名前を選択)-------------------------------------------------------------------------------- ----------------------------- nicknamecounttable(name、countnicknames)select name、count(count(count)を挿入する)firstTable ftが存在しない(select * from nicknamecounttable where name = ft.name)------これはオプションです------------------------------------------------------------------ --- countnicknames = 0でnicknamecounttableを削除します
MySql にはインデックス付きビュー (または同等のビュー) がありますか?どうやらそうではありません - したがって、このオプションは気にしないでください...