十六、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。

明天说存储过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

他 他 = new 他()

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值