• MySQL 触发器


    基础知识

       触发器主要针对于用户对于数据表的增删改操作前以及操作后的行为。

       触发器无法主动执行,必须由用户进行增删改操作后自动触发。

       注意:没有查询

    创建触发器

       语法介绍:

    # 插入前
    CREATE TRIGGER 触发器名 BEFORE INSERT ON 表名 FOR EACH ROW
    BEGIN
        ...
    END
    
    # 插入后
    CREATE TRIGGER 触发器名 AFTER INSERT ON 表名 FOR EACH ROW
    BEGIN
        ...
    END
    
    # 删除前
    CREATE TRIGGER 触发器名 BEFORE DELETE ON 表名 FOR EACH ROW
    BEGIN
        ...
    END
    
    # 删除后
    CREATE TRIGGER 触发器名 AFTER DELETE ON 表名 FOR EACH ROW
    BEGIN
        ...
    END
    
    # 更新前
    CREATE TRIGGER 触发器名 BEFORE UPDATE ON 表名 FOR EACH ROW
    BEGIN
        ...
    END
    
    # 更新后
    CREATE TRIGGER 触发器名 AFTER UPDATE ON 表名 FOR EACH ROW
    BEGIN
        ...
    END
    

    删除触发器

       语法介绍:

    drop trigger 触发器名;
    

    示例演示

       以下示例将演示当对user表进行插入与删除记录时,将会向log表中插入一条记录日志

       NEW表示即将插入的数据行,OLD表示即将删除的数据行。

    -- 创建需要操作的表
    
    CREATE TABLE user(
            id INT PRIMARY KEY auto_increment,
            name CHAR(32) not null,
            age tinyint not null,
            gender enum("famale","male"),
            role CHAR(64) default "user"
    );
    
    -- 创建日志表
    CREATE TABLE log(
            id INT PRIMARY KEY auto_increment,
            username CHAR(32),
            message CHAR(64)
    );
    
    
    delimiter $ -- delimiter是指自定义结束符,mysql中以;号结束,使用自定义结束符后则以自定义结束符为准
    
            -- 创建触发器,插入之后
            CREATE TRIGGER user_after_insert AFTER INSERT ON user FOR EACH ROW  -- EACH ROW 代表每一行
            BEGIN
                    IF NEW.role = "user" THEN -- 如果插入的角色是普通用户  NEW代表即将插入的行
                            INSERT INTO log(username,message) values
                                    (NEW.name,"新增一位普通用户");
                    ELSE 
                            INSERT INTO log(username,message) values
                                    (NEW.name,"新增一位管理员用户");
                    END IF; -- 结束必须加分号
            END $
    
            -- 创建触发器,删除之后
            CREATE TRIGGER user_after_delete AFTER DELETE ON user FOR EACH ROW 
            BEGIN
                    IF OLD.role = "user" THEN -- 如果删除的角色是普通用户 OLD代表即将删除的行
                            INSERT INTO log(username,message) values 
                                    (OLD.name,"删除一位普通用户");
                    ELSE
                            INSERT INTO log(username,message) values
                                    (OLD.name,"删除一位管理员用户");
                    END IF;
            END $
    
    delimiter ;
    
  • 相关阅读:
    黑马程序员系列第十篇 异常
    黑马程序员系列第八篇 IO(2)
    黑马程序员系列第九篇 类加载器
    黑马程序员系列第六篇 面向对象基础
    黑马程序员系列第七篇 IO(1)
    黑马程序员系列第五篇 集合(2)
    黑马程序员系列第四篇 集合(1)
    黑马程序员系列第三篇 反射
    vue 自定义指令集合
    计算图片缩放比例 使图片不变形
  • 原文地址:https://www.cnblogs.com/Yunya-Cnblogs/p/13619442.html
Copyright © 2020-2023  润新知