SQL 面试题 目录

SQL 中什么是触发器 (Trigger)?

推荐答案

触发器(Trigger)是 SQL 中的一种特殊存储过程,它在数据库中的特定事件(如 INSERT、UPDATE 或 DELETE)发生时自动执行。触发器通常用于维护数据的完整性、执行复杂的业务规则或记录数据变更日志。

本题详细解读

触发器的定义

触发器是与表相关联的数据库对象,它在表上发生特定事件时自动触发执行。触发器可以定义在以下事件上:

  • INSERT:当向表中插入新记录时触发。
  • UPDATE:当更新表中的记录时触发。
  • DELETE:当从表中删除记录时触发。

触发器可以在事件发生之前(BEFORE)或之后(AFTER)执行,具体取决于触发器的定义。

触发器的类型

  1. BEFORE 触发器:在事件发生之前执行,通常用于验证或修改即将插入、更新或删除的数据。
  2. AFTER 触发器:在事件发生之后执行,通常用于记录日志或执行其他后续操作。

触发器的语法

以下是一个简单的触发器创建语法示例:

  • trigger_name:触发器的名称。
  • BEFORE/AFTER:指定触发器在事件之前或之后执行。
  • INSERT/UPDATE/DELETE:指定触发器响应的事件类型。
  • table_name:触发器关联的表名。
  • FOR EACH ROW:指定触发器对每一行数据都执行。

触发器的应用场景

  1. 数据完整性:触发器可以用于强制实施复杂的业务规则,确保数据的一致性和完整性。
  2. 审计日志:触发器可以用于记录数据变更的历史,便于审计和追踪。
  3. 自动计算:触发器可以用于在数据变更时自动计算或更新相关字段。

触发器的优缺点

优点

  • 自动化处理复杂逻辑,减少应用程序代码的复杂性。
  • 确保数据的一致性和完整性。

缺点

  • 触发器可能隐藏业务逻辑,增加调试和维护的难度。
  • 频繁的触发器调用可能影响数据库性能。

示例

假设有一个 orders 表和一个 order_logs 表,我们希望每次插入新订单时,自动记录一条日志到 order_logs 表中。可以使用以下触发器实现:

在这个示例中,每当向 orders 表中插入新记录时,触发器会自动向 order_logs 表中插入一条日志记录。

纠错
反馈