Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

mysql trigger

作者:刀剑傲天   发布日期:2025-02-16   浏览:116

-- 创建一个名为 `before_insert_employee` 的触发器,它会在每次向 `employees` 表插入数据之前执行。
CREATE TRIGGER before_insert_employee 
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
    -- 检查新插入的员工年龄是否小于18岁,如果是则抛出错误。
    IF NEW.age < 18 THEN
        SIGNAL SQLSTATE '45000' 
        SET MESSAGE_TEXT = 'Employee must be at least 18 years old';
    END IF;

    -- 自动设置创建时间为当前时间。
    SET NEW.created_at = NOW();
END;

-- 创建一个名为 `after_update_salary` 的触发器,它会在每次更新 `employees` 表中的 `salary` 字段之后执行。
CREATE TRIGGER after_update_salary
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
    -- 如果薪资有变化,则记录到 `salary_changes` 表中。
    IF OLD.salary <> NEW.salary THEN
        INSERT INTO salary_changes (employee_id, old_salary, new_salary, change_date)
        VALUES (OLD.id, OLD.salary, NEW.salary, NOW());
    END IF;
END;

解释说明:

  1. before_insert_employee 触发器

    • 触发时机:在向 employees 表插入新记录之前 (BEFORE INSERT)。
    • 功能
      • 检查新插入的员工年龄是否小于18岁。如果是,则抛出错误并阻止插入操作。
      • 自动为新记录的 created_at 字段设置当前时间。
  2. after_update_salary 触发器

    • 触发时机:在更新 employees 表中的 salary 字段之后 (AFTER UPDATE)。
    • 功能
      • 如果薪资发生变化,则将旧薪资、新薪资以及变更时间记录到 salary_changes 表中。

这些触发器可以帮助你在数据库层面强制执行业务规则,并自动维护相关的历史记录。

上一篇:mysql查询进程

下一篇:mysql int类型

大家都在看

mysqlavg函数保留小数

mysql经纬度距离计算

存储过程mysql

mysql with语句

mysql时间加减

brew 启动mysql

unsigned在mysql中是什么意思

mysql 插入更新

python mysql update

mysql 查看权限

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站