MySQL触发器的简单使用教程(代码详细教程以及Nvicat界面操作教程)

什么是触发器

触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。

什么时候需要用到我们的触发器?

答:简单说就是当一张表的记录发生增删改操作的前后,另一张表需要进行相应的增删改操作的时候,我们就需要用到触发器。

比如,我有一个鸡汤表,他有一项被收藏数的统计属性叫做collect,同时我有另一张表soup_collect,他用来存放用户收藏的鸡汤的id(soup_id) 和 收藏用户的id信息(user_id)。
当我们的用户进行收藏的时候,我们的soup_collect表格会执行添加操作,此时我们的soup表格应该对被收藏的鸡汤记录的collect进行加1。
当我们用户取消收藏我们的鸡汤的时候,我们的soup_collect进行删除操作,我们的soup表格应该对被收藏的鸡汤记录的collect进行减1。

怎么实现

先搞清楚一个点,这个触发器应该写在哪个表里面?这里就不拐弯抹角了,由于我们是根据soup_collect表的增删改来修改soup表格,所以,我们的触发器应该要写在soup_collect中。

方式一、使用代码进行实现

CREATE TRIGGER [trigger_name]
[trigger_time] [trigger_event] ON [table_name] FOR EACH
BEGIN
触发的SQL语句;(这里的分号不要落下)
END;(结尾也是一个分号)

解释一下,上面这段代码中,所有的[小写字母]都是我们自己写的。
trigger_name是我们定义的触发器的名称。(比如:ins_col_soup)
trigger_time是我们定义的触发事件,是在增删改之前还是增删改之后,取值有BEFORE和AFTER。
trigger_event是我们定义的触发事件,有INSERT、DELETE、UPDATE
table_name是我们触发器定义在哪个表格(上面的例子,我们应该是soup_collect)
最后是BEGIN和END中的SQL语句,这是触发器被触发的时候要执行的SQL语句。

废话少说,我们这就举两个简单的例子,一个是增加的触发器,一个是删除的触发器:(BEGIN和END中间那段SQL语句,前面的空间可以不要,这里只是为了可读性高一点

CREATE TRIGGER ins_col_soup
AFTER INSERT ON soup_collect FOR EACH
BEGIN
    update soup 
    set collect = collect+1 
    where soup.id = new.soup_id;
END;(结尾也是一个分号)

这里有两个点要注意:
1、如果是增加,那么新增加的这条记录,我们用new来表示,他的属性我们用.来调用,比如上面代码中新的记录的soup_id属性,我们就表示为new.soup_id。

2、如果是删除,那么被删除的这条记录,我们用old来表示,他的属性我们用.来调用,比如下面代码中被删除记录的soup_id属性,我们就表示为old.soup_id。

CREATE TRIGGER del_col_soup
AFTER DELETE ON soup_collect FOR EACH
BEGIN
    update soup 
    set collect = collect-1 
    where soup.id = old.soup_id;
END;(结尾也是一个分号)

方式二、使用Navicat进行操作

这个就更简单了,首先,进入我们想要编写触发器的表(soup_collect)。然后选择菜单项的FILE(文件)—> Design Table(设计表格)。
在这里插入图片描述

然后我们点击Trigger菜单项,就可以设置我们的触发器啦。具体如下:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值