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

mysql创建触发器

作者:硝烟   发布日期:2025-07-06   浏览:15

-- 创建触发器示例代码

-- 1. 创建一个在插入数据时触发的触发器
DELIMITER //

CREATE TRIGGER before_insert_example 
BEFORE INSERT ON your_table_name
FOR EACH ROW
BEGIN
    -- 在插入新记录之前执行的操作
    SET NEW.column_name = UPPER(NEW.column_name);  -- 将某一列的值转换为大写
END; //

DELIMITER ;

-- 2. 创建一个在更新数据时触发的触发器
DELIMITER //

CREATE TRIGGER after_update_example 
AFTER UPDATE ON your_table_name
FOR EACH ROW
BEGIN
    -- 在更新记录之后执行的操作
    IF OLD.column_name != NEW.column_name THEN
        INSERT INTO audit_log (table_name, action, old_value, new_value)
        VALUES ('your_table_name', 'UPDATE', OLD.column_name, NEW.column_name);
    END IF;
END; //

DELIMITER ;

-- 3. 创建一个在删除数据时触发的触发器
DELIMITER //

CREATE TRIGGER after_delete_example 
AFTER DELETE ON your_table_name
FOR EACH ROW
BEGIN
    -- 在删除记录之后执行的操作
    INSERT INTO audit_log (table_name, action, deleted_value)
    VALUES ('your_table_name', 'DELETE', OLD.column_name);
END; //

DELIMITER ;

解释说明:

  1. 触发器类型

    • BEFOREAFTER:触发器可以在操作(如插入、更新或删除)之前 (BEFORE) 或之后 (AFTER) 触发。
  2. 触发时机

    • INSERT:在插入新记录时触发。
    • UPDATE:在更新现有记录时触发。
    • DELETE:在删除记录时触发。
  3. 作用范围

    • FOR EACH ROW:表示触发器对每一行数据都生效。
  4. 示例代码中的具体操作

    • 第一个触发器在插入新记录之前将某一列的值转换为大写。
    • 第二个触发器在更新记录之后,如果某一列的值发生变化,则将变更记录插入到审计日志表中。
    • 第三个触发器在删除记录之后,将被删除的记录信息插入到审计日志表中。
  5. DELIMITER //DELIMITER ;

    • 用于改变语句结束符,以便在触发器定义中使用分号而不提前结束触发器定义。

上一篇:mysql row_number() over怎么使用

下一篇:mysql修改数据库名称

大家都在看

mysqlavg函数保留小数

mysql经纬度距离计算

存储过程mysql

mysql with语句

mysql时间加减

brew 启动mysql

unsigned在mysql中是什么意思

mysql 插入更新

mysql.user

python mysql update

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

Laravel 中文站