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

MySQL之触发器

时间:2018-07-24 15:53:45      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:value   sel   creat   var   日志   har   0.00   event   直接   

使用触发器可以定制用户对表进行【增、删、改】操作时前后的行为,注意:没有查询

一、创建触发器

# 插入前
CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW
BEGIN
    ...
END

# 插入后
CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROW
BEGIN
    ...
END

# 删除前
CREATE TRIGGER tri_before_delete_tb1 BEFORE DELETE ON tb1 FOR EACH ROW
BEGIN
    ...
END

# 删除后
CREATE TRIGGER tri_after_delete_tb1 AFTER DELETE ON tb1 FOR EACH ROW
BEGIN
    ...
END

# 更新前
CREATE TRIGGER tri_before_update_tb1 BEFORE UPDATE ON tb1 FOR EACH ROW
BEGIN
    ...
END

# 更新后
CREATE TRIGGER tri_after_update_tb1 AFTER UPDATE ON tb1 FOR EACH ROW
BEGIN
    ...
END

ex-准备表:

# 创建用户表
create table user(
    id int primary key auto_increment,
    name varchar(20) not null,
    reg_time datetime, # 注册用户的时间
    affirm enum(yes,no) # no表示该用户执行失败
);

#创建日志表
create table userLog(
    id int primary key auto_increment,
    u_name varchar(20) not null,
    u_reg_time datetime # 注册用户的时间
);

# 创建触发器 delimiter 默认情况下,delimiter是分号 触发器名称应遵循命名约定[trigger time]_[table name]_[trigger event]
delimiter //
create trigger after_user_insert after insert on user for each row
begin
    if new.affirm = yes then
        insert into userLog(u_name,u_reg_time) values(new.name,new.reg_time);
    end if;

end //
delimiter ;


#往用户表中插入记录,触发触发器,根据if的条件决定是否插入数据
insert into user(name,reg_time,affirm) values (张三,now(),yes),(李四,now(),yes),(王五,now(),no);


# 查看日志表,发现多了两条记录 

mysql> select * from userlog;
+----+--------+---------------------+
| id | u_name | u_reg_time          |
+----+--------+---------------------+
|  1 | 张三   | 2018-06-14 17:52:49 |
|  2 | 李四   | 2018-06-14 17:52:49 |
+----+--------+---------------------+
rows in set (0.00 sec)

注意:在为INSERT定义的触发器中,可以仅使用NEW关键字。不能使用OLD关键字。但是,在为DELETE定义的触发器中,没有新行,因此您只能使用OLD关键字。在UPDATE触发器中,OLD是指更新前的行,而NEW是更新后的行

二 使用触发器

触发器无法由用户直接调用,而知由于对表的【增/删/改】操作被动引发的。

三 删除触发器

drop trigger trigger_userLog;

MySQL之触发器

标签:value   sel   creat   var   日志   har   0.00   event   直接   

原文地址:https://www.cnblogs.com/glh-ty/p/9357003.html

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