当前位置:首页 > 问答 > 正文

数据库管理 自动化操作 mysql触发器,MySQL触发器的使用方法与实用案例解析

  1. MySQL触发器
  2. 触发器语法
  3. BEFORE/AFTER触发器
  4. INSERT/UPDATE/DELETE事件
  5. 自动化数据校验
  6. 审计日志自动化
  7. 级联操作
  8. NEW与OLD关键字
  9. 触发器限制与性能影响
  10. 实用案例:库存管理

MySQL触发器的使用方法

  1. 基本语法

    CREATE TRIGGER trigger_name  
    BEFORE/AFTER INSERT/UPDATE/DELETE  
    ON table_name FOR EACH ROW  
    BEGIN  
        -- 触发器逻辑(SQL语句)  
    END;
    • BEFORE/AFTER:指定触发时机(操作前/后)。
    • FOR EACH ROW:行级触发,逐行执行逻辑。
  2. 关键变量

    数据库管理 自动化操作 mysql触发器,MySQL触发器的使用方法与实用案例解析

    • NEW:引用新数据(适用于INSERT/UPDATE)。
    • OLD:引用旧数据(适用于UPDATE/DELETE)。
  3. 示例:数据校验

    CREATE TRIGGER validate_salary  
    BEFORE INSERT ON employees  
    FOR EACH ROW  
    BEGIN  
        IF NEW.salary < 0 THEN  
            SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '薪资不能为负数';  
        END IF;  
    END;

实用案例解析

  1. 自动化审计日志

    • 场景:记录用户表的所有修改操作。
      CREATE TRIGGER log_user_changes  
      AFTER UPDATE ON users  
      FOR EACH ROW  
      INSERT INTO audit_log (user_id, action, old_value, new_value, timestamp)  
      VALUES (OLD.id, 'UPDATE', OLD.username, NEW.username, NOW());
  2. 库存实时更新

    数据库管理 自动化操作 mysql触发器,MySQL触发器的使用方法与实用案例解析

    • 场景:订单生成时自动减少库存。
      CREATE TRIGGER update_inventory  
      AFTER INSERT ON orders  
      FOR EACH ROW  
      UPDATE products SET stock = stock - NEW.quantity  
      WHERE id = NEW.product_id;
  3. 禁止删除关键数据

    CREATE TRIGGER prevent_admin_deletion  
    BEFORE DELETE ON admins  
    FOR EACH ROW  
    BEGIN  
        IF OLD.role = 'superadmin' THEN  
            SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '禁止删除超级管理员';  
        END IF;  
    END;

注意事项

  1. 性能影响:复杂触发器可能降低数据库性能,需谨慎设计。
  2. 调试困难:触发器错误可能隐式发生,建议结合日志排查。
  3. MySQL限制:同一表同类事件仅允许一个触发器(如一个表只能有一个BEFORE INSERT触发器)。

发表评论