码迷,mamicode.com
首页 > 数据库 > 详细

MySQL 触发器

时间:2020-09-17 15:39:05      阅读:37      评论:0      收藏:0      [点我收藏+]

标签:lse   create   code   incr   new   mysql 触发器   primary   int   before   

基础知识

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

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

   注意:没有查询

创建触发器

   语法介绍:

# 插入前
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 ;

MySQL 触发器

标签:lse   create   code   incr   new   mysql 触发器   primary   int   before   

原文地址:https://www.cnblogs.com/Yunya-Cnblogs/p/13619442.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!