PL/SQL - 触发器:数据库自动化的友好指南
你好,未来的数据库大师们!今天,我们将深入PL/SQL触发器的神奇世界。如果你是编程新手,不用担心——我将是你在这次冒险中的可靠向导。在本教程结束时,你将能够像专业人士一样创建触发器!
触发器到底是什么?
想象你是一名图书管理员(请跟上我的思路)。每当一本书被借出时,你需要更新日志,检查是否逾期,可能还要给借阅者发送提醒。手动为每本书做这些事情将是令人筋疲力尽的!这就是触发器的用武之地。
在数据库世界中,触发器就像是有帮助的小精灵,当特定事件发生时自动执行操作。它们是一段代码,在特定的数据库操作后“触发”。
创建触发器:让我们动手吧!
现在,让我们创建第一个触发器。我们从简单的开始,逐步深入。
基本触发器结构
以下是触发器的一般结构:
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