十六、MySQL数据库之触发器
今天我们再来学习MySQL数据库中一个重要的知识点,触发器
触发器
第一步,我们先来认识一下这个触发器是什么东西,废话不多说,直接百度百科
可以看到有很大一段话,我建议大家多读几遍,这里呢,我用红线去画住重点,触发器就相当于我们的闹钟一样,每当到了早上的八点或者八点半准时叫我们起床。其中触发的事件就是时间,好比现在到了早上的8:00了,然后闹钟就响了。
读完之后,我们呢来看看这个触发器如何创建、调用、查看、删除。
创建触发器
创建单个执行语句触发器
创建触发器,我们需要用到一个关键词:TRIGGER,下面是完整命令:
CREATE TRIGGER 触发器名称 BEFORE(之前) | AFTER(之后) 触发事件
ON 表名 FOR EACH ROW 执行语句;
嗯,大概就这样,我来解释一下,创建一个TRIGGER,名字叫xxx,bffore就是在这个触发事件之前,做什么什么操作,after就是之后,触发事件呢有三种,insert、update、delete,on后面跟着的是作用的表,FOR EACH ROW 就是作用到每一行,再往后就是具体执行什么语句了。
我们现在来弄一个这个触发器,大家感受一下。
我们再创建一个表,叫 t_log 日志表,用来存放日志的,然后弄一个id,一个content,一个日期就可以了。
create table t_log(
id int not null PRIMARY key AUTO_INCREMENT,
content varchar(50) not null,
createDt datetime
)engine= INNODB charset = utf8
创建好之后,我们来开始弄触发器。
CREATE TRIGGER wirte_log_insert_student after insert on t_student
FOR EACH ROW insert into t_log values(null, CONCAT('刚刚新增加了一个',new.name,'的学生'), NOW());
我来给大家解释一下这个命令,前面的我已经说了,就不说了,主要的是后面的这个insert into t_log
首先是这个CONCAT函数,这个函数是用来做字符串拼接的,可以使用逗号隔开,能填好多好多,但是不要超过了这个content的大小,我们给的是50个字。
然后就是这个new.name,这个是一个过度变量
过度变量
过度变量有两个一个是NEW,一个是OLD。
NEW呢就是用在INSERT这种触发事件,这里的NEW就是指代的我们刚刚新插入的这个表的其中一行数据,我们可以通过NEW.表中的属性,然后获取到具体的值。
OLD呢,就是用在UPDATE、DELETE这两个触发事件的过度变量,用法同NEW一样。
接着就是最后的NOW(),这个就是当前时间。
然后我们创建一下。
是OK的啊,创建好之后,我们来测试一下。
我们插入了一条数据啊,我们来看一下,这个log表中是不是也有一条数据。
是OK的没有错啊,说明我们的触发器生效了。
创建多个执行语句触发器
创建多个执行语句是这样写的
delimiter 分隔符号(自己定义)
create trigger 触发器名称 bffer 或者 after 触发事件
on xxx表 for each row
begin
要操作的SQL1;
要操作的SQL2;
end
分隔符号
delimiter;
这里需要用到两个新东西,一个是这个delimiter,这个东西是做一个划界用的,因为SQL遇到分号啊,就直接执行完成就提交了,我们不能让他提交,不然多条SQL的执行语句后面的就用不到了,而且可能还会报错,所以需要用一下它。
然后就是begin end,这个就是一个开始结束,用法和上面的这个delimiter类似,也是做区域划分的。
知道怎么去创建之后,我们来弄一个多条执行语句的触发器。
我们在删除学生的时候,添加一个log,顺便再去添加一个食物啊,因为举不到合适的例子,就这样吧。
现在我们呢,删除一个学生,就把刚刚添加的内个 触发器 这个学生给他删除了。
是不是删除了?然后我们再来看看日志表
然后再看一下食物表
也是OK的啊。
查看触发器
查看触发器我们使用命令
SHOW TRIGGERS;
我们就用这个命令去查看一下刚刚创建的两个触发器。
当然啊,一个数据库定义的触发器不会太多啊,我是没有遇到定义一大堆的触发器的,除非是业务需要啊。
删除触发器
然后是删除,删除就好说了,直接上命令
DROP TRIGGER 触发器名字
我们来把我们刚刚创建的给他删除了。
我们再来看一下,还有没有触发器了。
很好啊,屁也没有了。
今天就这么多,大家一定要好好练习一下,多练几遍,有不会的加我QQ:2100363119。
明天说存储过程。
本文地址:https://blog.csdn.net/weixin_45908370/article/details/107382114
上一篇: springcloud基本组件(五):网关Zuul
下一篇: Jsp入门实战上