我有 2 个表,Organization 和 State(它在哪里)。每个组织都有一个状态。我现在想为表 State 实现一个 Integer 列,该列跟踪其中有多少组织。有点像每当一个新组织被插入到 Organizations 表中时,更新相应 State 表中的整数列,其中 org.state_id = state_id。
这可以使用触发器吗?
与其跟踪计算列,不如只根据需要计算所需的内容。因此,如果您有这两个表:
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;