CodeGym /课程 /SQL SELF /认识trigger

认识trigger

SQL SELF
第 57 级 , 课程 0
可用

Trigger(或者说trigger)其实就是数据库里的“callback”,会对特定事件做出反应。换句话说,trigger就是在表里执行INSERTUPDATE或者DELETE等操作时自动触发的反应。

想象一下你有个很聪明的助手,每次你加一条学生记录,助手就会自动帮你更新“最后修改日期”这个字段。数据库里的trigger就是这么干的:它会“监听”事件,然后执行你预设的操作。

Trigger其实是把两件事结合起来:

  1. 事件:表里发生了什么事(比如插入一条记录)。
  2. trigger函数:事件发生时要执行的代码。
注意:

trigger必须和某个函数绑定在一起。函数决定了trigger触发时到底要干啥。

trigger的使用场景举例

我们来看看trigger在哪些情况下特别有用。

  1. 自动更新数据

比如你想让学生表里有个last_modified字段,每次有记录被改动时自动更新。你不用每次都手动改这个字段,直接写个trigger就能帮你搞定。

  1. 变更日志记录

你想追踪是谁、什么时候改了表里的数据。trigger可以在数据被改动时自动往日志表(audit表)插一条记录。

  1. 数据校验

如果插入的数据需要符合某些规则(比如学生年龄必须大于18),trigger可以在插入前帮你检查。

  1. 自动计算

比如你有个orders表,每次加订单时都要更新客户的总消费额。trigger可以帮你自动更新,不用你手动算。

什么时候用trigger

既然知道trigger能干啥,我们来聊聊什么时候真的该用trigger。

日志和审计:trigger特别适合用来做审计日志,追踪关键表的数据变化。

保证数据完整性:比如你从数据库里删掉一个课程,trigger可以自动把所有关联的学生也删掉,避免留下“孤儿”数据。

自动化重复任务:比如自动更新计算字段、聚合数据等等。

在数据库里实现业务逻辑:有些逻辑可以直接放在数据库层,不用全靠应用代码。

trigger的优点

你应该已经发现,trigger其实挺强大的。它有这些好处:

自动化:基本不用人管。比如谁改了数据,trigger会自动记录。

减少代码重复:不用每个应用都写一遍校验或更新逻辑,直接放数据库里就行。

保证数据完整性:trigger可以作为额外的保护层,确保数据一直是对的。

trigger的缺点

当然,任何工具都有缺点。来看看trigger的“黑暗面”:

  • 难调试:trigger都是“幕后”运行的。如果它没按你想的那样工作,调试起来会很麻烦。

  • 可能影响性能:trigger太复杂或者触发太频繁,会拖慢SQL查询速度。

  • 隐藏的逻辑:业务逻辑藏在trigger里,开发者有时候搞不清数据库到底发生了啥。

实际使用场景

例子1:变更日志记录

比如你有个students表,存学生信息。你想追踪每次记录的变更。trigger可以在学生数据被改动时,自动往audit_log表插一条记录。

例子2:自动更新

students表里有个last_modified字段。你想每次学生数据被改动时,这个字段都能自动更新。可以写个trigger,在更新后自动执行。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION