使用触发器是更新计数或时间戳字段的好习惯吗?

Is using triggers a good practice for updating count or timestamp fields?

我有两个表(简化):

TABLE batch
batch_id      uuid
student_count smallint

TABLE students
batch_id    uuid
student_id  uuid

所以我想在有学生插入数据库时​​更新 student_count(加 1)。我的问题是我应该使用触发器来更新 student_count 还是使用单独的查询来更新 student_count。 (我的数据库和服务器不在同一台机器上。)

我不能使用前置触发器,因为插入可能会失败。(除非我使用了一个我想在使用触发器时避免的事务。)

所以基本上 this 是个好习惯?

对于这样的任务,最好使用触发器,正是因为触发器保证 运行,并且它会自动 运行s 在与触发语句相同的事务中。这是一件好事,因为这意味着要么两个操作都成功,要么都失败(原子性),这正是您在这种情况下想要的。

然而,最好的解决方案可能是根本不存储多余的 student_count,而是在您从表格中 SELECT 时即时计算它。持久化冗余数据只是一个很好的解决方案,如果从性能角度来看,当你需要它时计算它是无法忍受的。