MYSQL--触发器

一:介绍:

1.触发器实际上就是一种特殊的存储过程,两者都能够在MYSQL当中完成特定的功能,存储在服务器上的特殊SQL片段,可以重复进行使用,提高复用性的一种功能.但是触发器并不需要进行调用,在使用DML操作的时候会自动的调用相关的触发器操作

2.触发器能够对于DML操作当中的,删除(delete),更新(update),插入(insert) 除此之外触发器并不会作出反应

3.触发器的使用会让表跟表之间建立起来一定的关联,对一个表使用DML操作也可能会使另外的一个表触发提前设定的操作

二:语法:

sql 复制代码
基础语法:
一:仅仅只有一个执行语句的触发器
create trigger (tri_name) after/before DML操作(D,I,U)
on (进行操作的表) for each row
执行语句(包含触发之后要关联的表);

二:有多个语句需要进行执行时,就要跟存储过程联合起来进行使用
create trigger (tri_name) after/before DML操作(D,I,U)
on (进行操作的表) for each row
begin 
    执行语句
end ...;




-- 通过使用触发器,让两个表之间建立一定的联系
-- 要求:当user添加数据时,添加用户的id,账号,密码之后,在user_log登记注册的时间,以及情况

-- 一:仅仅只有一个执行语句的语法
create TRIGGER tri_0 after insert
on user for each row
insert into user_log VALUES(NULL,now(),'新用户添加');

insert into user VALUES(null,'张三',123456);

TRUNCATE user;

-- 要求二:当user用户修改的时候,自动增加日志,并记录时间,情况
create trigger tri_1 after update
on user for each row
insert into user_log VALUES(null,now(),'用户修改了数据');

update user set password=456123 where name='张三';

三:NEW OLD的使用*

1.介绍:

MYSQL当中也定义了NEW OLD,从而用来表示触发器所在表的一些数据,从而让数据显示的更加清晰,满足需求,记录的更加详细

2.分类

在DML操作当中,不同的new 或者 old有不同的含义

1>对于insert 操作,仅仅只有new操作,表示自己将要或者时已经新增的数据

2>对于update操作,两种方式都有,OLD代表的是修改之前的数据,NEW代表的是将要或者是已经修改的数据

3>对于delete操作,仅仅只有OLD操作,表示将要删除或者是已经删除的数据

sql 复制代码
-- 要求一:通过使用触发器,修改用户密码的时候,也要在日志当中记录修改之前以及之后的密码,以及修改时间
drop TRIGGER tri_2;

insert类型触发器
create TRIGGER tri_0 after insert
on user for each row
insert into user_log VALUES(NULL,now(),CONCAT('有新用户添加,用户名称为:',new.username));

insert into user VALUES(null,'张三',123456);



update类型触发器
create trigger tri_2 before update
on user for each row
insert into user_log VALUES(null,now(),concat_ws('-',old.username,'修改了密码,修改前为',old.password,'修改后为:',new.password));

update user set password = '15090436290' where username='张三';


delete类型触发器
create trigger tri_3 after delete
on user for each row 
insert into user_log VALUES(null,now(),concat('删除的用户名称是',old.username));

delete from user where username='张三';

四:注意事项

1.在使用触发器之前,需要想好操作类型是DML当中的哪一种(D,I,U),以及什么时候会触发(B,A),以及更重要的,是单行数据操作,还是多行的数据操作,从而选择不同的操作方式.

2.实际上,触发器的执行效率非常的低下,插入数据的效率远远比通过使用触发器进行出发所用的时间要短,所以最好还是使用插入的方法,并不推荐使用触发器

3.触发器是一行一行进行的,所以对于增删改十分频繁的表,一定一定一定一定不要使用 触发器!!!! 十分浪费资源

感谢观看!

相关推荐
YangYang9YangYan26 分钟前
2026 电商数据运营校招 JD 梳理|岗位任务、技能与面试考点汇总
大数据·数据库·数据分析
Sun 328528 分钟前
读懂集中式主备的集群状态与节点角色
数据库·opengauss·集群·节点角色·磐维数据库·运行状态
毕业设计70340 分钟前
(免费领源码) SpringBoot 游戏交易平台17600-java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
java·spring boot·mysql·决策树·mybatis·idea·推荐算法
溪语流沙1 小时前
Django + Vue电商项目第001讲:开篇|注册登录加增删改查,那不是电商
redis·python·mysql·docker·typescript·django·vue
努力努力再努力wz1 小时前
【Redis进阶系列】:从主从复制到 Sentinel,一文建立故障检测、Leader 选举与 Failover 的完整心智模型
数据库·redis·缓存
达梦数据1 小时前
DMDRS搭建部署简介与运行环境
数据库
Omics Pro1 小时前
1个月2轮融资!长寿虚拟细胞
数据库·人工智能·算法·机器学习·自然语言处理
程序员阿黄1 小时前
基于 Django 与 Vue 3 的智能实验室预约系统设计与实现
后端·python·mysql·django·vue·毕设
zcn1262 小时前
row_number()函数与group by性能比较
数据库·sql优化改写
小K讲AI营销2 小时前
AI基础设施融资路径的中美比较:资本市场模式与政策金融模式
大数据·数据库·人工智能