PL/SQL - 触发器:数据库自动化的友好指南

你好,未来的数据库大师们!今天,我们将深入PL/SQL触发器的神奇世界。如果你是编程新手,不用担心——我将是你在这次冒险中的可靠向导。在本教程结束时,你将能够像专业人士一样创建触发器!

PL/SQL - Triggers

触发器到底是什么?

想象你是一名图书管理员(请跟上我的思路)。每当一本书被借出时,你需要更新日志,检查是否逾期,可能还要给借阅者发送提醒。手动为每本书做这些事情将是令人筋疲力尽的!这就是触发器的用武之地。

在数据库世界中,触发器就像是有帮助的小精灵,当特定事件发生时自动执行操作。它们是一段代码,在特定的数据库操作后“触发”。

创建触发器:让我们动手吧!

现在,让我们创建第一个触发器。我们从简单的开始,逐步深入。

基本触发器结构

以下是触发器的一般结构:

CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name
[FOR EACH ROW]
[WHEN condition]
DECLARE
-- 变量声明
BEGIN
-- 触发器主体
EXCEPTION
-- 异常处理
END;
/

别被这个吓到了!我们会一点一点分解它。

示例 1:一个简单的“Hello, World!”触发器

让我们创建一个触发器,每当新行插入表中时,它会说“Hello, World!”:

CREATE OR REPLACE TRIGGER hello_world_trigger
AFTER INSERT ON employees
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, World! 添加了新员工!');
END;
/

这里发生了什么?

  • CREATE OR REPLACE TRIGGER:这告诉数据库我们正在创建一个新的触发器(或者替换一个已存在的触发器)。
  • AFTER INSERT ON employees:我们的触发器将在新行插入'employees'表后触发。
  • BEGIN...END:这是我们放置触发器逻辑的地方。
  • DBMS_OUTPUT.PUT_LINE:这只是打印文本的一种花哨方式。

示例 2:记录变更

让我们创建一个更有用的触发器,它记录对'employees'表的变更:

CREATE OR REPLACE TRIGGER log_salary_changes
AFTER UPDATE OF salary ON employees
FOR EACH ROW
BEGIN
INSERT INTO salary_change_log (employee_id, old_salary, new_salary, change_date)
VALUES (:OLD.employee_id, :OLD.salary, :NEW.salary, SYSDATE);
END;
/

这里有什么新内容?

  • AFTER UPDATE OF salary:这个触发器只在'salary'列更新时触发。
  • FOR EACH ROW:这意味着触发器针对UPDATE影响的每一行都会触发。
  • :OLD:NEW:这些指的是更新行的旧值和新值。

触发触发器:让魔法发生

现在我们已经创建了触发器,我们如何让它们触发呢?很简单!通过执行它们正在监视的数据库操作。

示例 3:触发我们的触发器

让我们看看我们的触发器在实际中的效果:

-- 这将触发我们的'hello_world_trigger'
INSERT INTO employees (employee_id, name, salary)
VALUES (1, 'John Doe', 50000);

-- 这将触发我们的'log_salary_changes'触发器
UPDATE employees
SET salary = 55000
WHERE employee_id = 1;

当你运行这些命令时,幕后,我们的触发器会立即行动!

触发器类型:便捷表格

以下是一个不同类型触发器的快速参考表:

触发器类型 描述 示例用例
BEFORE 在触发动作之前执行 在插入之前验证或修改输入数据
AFTER 在触发动作之后执行 记录变更或更新相关表
INSERT 在INSERT操作时执行 自动生成相关记录
UPDATE 在UPDATE操作时执行 跟踪数据随时间的变化
DELETE 在DELETE操作时执行 维护引用完整性
INSTEAD OF 与视图一起使用,定义自定义的插入、更新或删除操作 实现复杂的视图更新

总结:你现在是一名触发器学徒!

恭喜你!你已经迈出了进入PL/SQL触发器世界的第一步。我们涵盖了创建触发器的基础,看到了它们的实际应用,甚至瞥见了不同类型的触发器。

记住,触发器是强大的工具,但权力越大,责任越大。明智地使用它们,它们将使你的数据库工作更加智能,而不是更加困难。

继续练习,保持好奇心,在你意识到之前,你将成为一名触发器大师!祝你好运,未来的数据库大师们!

Credits: Image by storyset