触发新表插入

时间:2012-08-20 18:23:49

标签: mysql triggers

我有2个表,组织和状态(它在哪里)。每个组织都有一个州。我现在想要为表State实现一个Integer列,它跟踪其中有多少组织。有点像每当新组织插入组织表时,更新相应状态表中的整数列,其中org.state_id = state_id。

这是否可以使用触发器?

2 个答案:

答案 0 :(得分: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

这可以避免完整性问题。如果您正在处理数十万条记录或在报告环境中操作,那么您可能需要考虑计算信息。

答案 1 :(得分:1)

我同意Glenn's answer,在所有条件相同的情况下,按需是一个更好的解决方案,但答案是,是的,它可以通过触发来完成。很容易。

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;

Demo

相关问题