在 Table(表)中的触发器(Trigger),主要用于 在某个表上发生特定事件(INSERT / UPDATE / DELETE)时,自动执行一段预定义的 SQL 逻辑。它是数据库层面的一种“自动响应机制”。
示例:
-- 禁止员工工资被降低到原工资的 80% 以下
CREATE TRIGGER trg_check_salary
BEFORE UPDATE ON employees
FOR EACH ROW
BEGIN
IF NEW.salary < OLD.salary * 0.8 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '工资降幅过大';
END IF;
END;
记录谁、在什么时间、对数据做了什么修改。
示例:
CREATE TRIGGER trg_emp_audit
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
INSERT INTO employee_audit(emp_id, old_salary, new_salary, change_time)
VALUES (OLD.id, OLD.salary, NEW.salary, NOW());
END;
示例:
-- 更新订单金额时,自动更新订单总金额
CREATE TRIGGER trg_update_order_total
AFTER INSERT ON order_items
FOR EACH ROW
BEGIN
UPDATE orders
SET total_amount = total_amount + NEW.amount
WHERE id = NEW.order_id;
END;
USER()、CURRENT_USER())| 时机 | 含义 |
|---|---|
| BEFORE | 在数据写入前执行(常用于校验、修改数据) |
| AFTER | 在数据写入后执行(常用于日志、同步) |
| 事件 | 说明 |
|---|---|
| INSERT | 插入数据时触发 |
| UPDATE | 更新数据时触发 |
| DELETE | 删除数据时触发 |
✅ 适合用触发器的场景:
❌ 不适合用触发器的场景:
触发器用于在特定表发生 INSERT / UPDATE / DELETE 时,由数据库自动执行一段逻辑,常用于数据校验、审计、自动计算和数据同步。
如果你使用的是 MySQL / Oracle / SQL Server,我也可以给你对应数据库的具体语法示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。