組織と州(ある場所)の2つのテーブルがあります。各組織には州があります。ここで、StateテーブルにInteger列を実装して、その中にある組織の数を追跡したいと思います。新しい組織がOrganizationsテーブルに挿入されるたびに、org.state_id=state_idである対応するStateテーブルの整数列を更新します。
これはトリガーを使用して可能ですか?
計算された列を追跡するのではなく、必要に応じて必要なものだけを計算する方が望ましい場合がよくあります。したがって、これら2つのテーブルがある場合:
organization(id, name, state_id)
state(id, name)
次のようなクエリはカウントを取得します。
SELECT s.name, COUNT(*) AS organization_count
FROM state s JOIN organization o ON (s.id = o.state_id)
GROUP BY s.name
これにより、整合性の問題が回避されます。数十万のレコードを処理している場合、またはレポート環境で操作している場合は、情報の計算を検討することをお勧めします。
すべてが同じであれば、オンデマンドの方が優れたソリューションであるというGlenn の回答に同意しますが、答えは、はい、トリガーを使用して実行できるということです。とても簡単に。
CREATE TRIGGER organization_trigger_insert AFTER INSERT ON organization
FOR EACH ROW BEGIN
UPDATE state SET total = total + 1 WHERE NEW.state_id = state_id;
END;
CREATE TRIGGER organization_trigger_delete BEFORE DELETE ON organization
FOR EACH ROW BEGIN
UPDATE state SET total = total - 1 WHERE OLD.state_id = state_id;
END;