2022- MYSQL- 04触发器

目录

5. 触发器

5.1 介绍

 5.2 语法

 5.3 案例

5.3.1 插入数据触发器

5.3.2 更新数据触发器 

5.3.3 删除数据触发器

参考链接


5. 触发器

5.1 介绍

触发器概念:触发器是一种特殊的存储过程,它在试图更改触发器所保护的数据时自动执行。

触发器与存储过程的异同
相同点:1. 触发器是一种特殊的存储过程,触发器和存储过程一样是一个能够完成特定功能、存储在数据库服务器上的SQL片段。
不同点:2. 存储器调用时需要调用SQL片段,而触发器不需要调用,当对数据库表中的数据执行DML操作时自动触发这个SQL片段的执行,无需手动调用。

  • 在MySQL中,只有执行insert,delete,update操作时才能触发触发器的执行;
  • 触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作;
  • 使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发;
  1. 行级触发器,行被CUD的多少次,触发器就触发多少次
  2. 语句触发,无论行被CUD的多少次,触发器只触发一次

 5.2 语法

 5.3 案例

通过触发器记录 tb_user 表的数据变更日志,将变更日志插入到日志表user_logs中, 包含增加, 修改 , 删除 ;

表结构准备:

-- 准备工作 : 日志表 user_logs

create table user_logs(

id int(11) not null auto_increment,
operation varchar(20) not null comment '操作类型, insert/update/delete',
operate_time datetime not null comment '操作时间',
operate_id int(11) not null comment '操作的ID',
operate_params varchar(500) comment '操作参数',
primary key(`id`)

)engine=innodb default charset=utf8;

5.3.1 插入数据触发器

create trigger tb_user_insert_trigger

    after insert on tb_user for each row

begin

    insert into user_logs(id, operation, operate_time, operate_id, operate_params)
        VALUES 
    (null, 'insert', now(), new.id, concat('插入的数据内容为:
    id=',new.id,',name=',new.name, ', phone=', NEW.phone, ', email=', NEW.email, ',
    profession=', NEW.profession));

end;

 -- 插入数据到

insert into tb_user(id, name, phone, email, profession, age, gender, status, createtime)                 
    VALUES 
(26,'二皇子','18809091212','erhuangzi@163.com','软件工 程',23,'1','1',now());

 -- 查看 show triggers ;

5.3.2 更新数据触发器

create trigger tb_user_update_trigger

after update on tb_user for each row
begin

insert into user_logs(id, operation, operate_time, operate_id, operate_params)
VALUES
(null, 'update', now(), new.id,
concat('更新之前的数据: id=',old.id,',name=',old.name, ', phone=',
old.phone, ', email=', old.email, ', profession=', old.profession,
' | 更新之后的数据: id=',new.id,',name=',new.name, ', phone=',
NEW.phone, ', email=', NEW.email, ', profession=', NEW.profession));

end;

测试

-- 更新

update tb_user set profession = '会计' where id = 23;
update tb_user set profession = '会计' where id <= 5;

  

5.3.3 删除数据触发器

create trigger tb_user_delete_trigger

after delete on tb_user for each row
begin

insert into user_logs(id, operation, operate_time, operate_id, operate_params)
VALUES
(null, 'delete', now(), old.id,
concat('删除之前的数据: id=',old.id,',name=',old.name, ', phone=',
old.phone, ', email=', old.email, ', profession=', old.profession));

end;

测试

-- 删除数据
delete from tb_user where id = 25;

 -- 查看 show triggers ;

各个触发器执行效果 

参考链接

https://blog.csdn.net/A496608119/article/details/123277898

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值