47 张图带你 MySQL 进阶!!! (8)

MySQL 从 5.0 开始支持触发器,触发器一般作用在表上,在满足定义条件时触发,并执行触发器中定义的语句集合,下面我们就来一起认识一下触发器。

举个例子来认识一下触发器:比如你有一个日志表和金额表,你每录入一笔金额就要进行日志表的记录,你会怎么样?同时在金额表和日志表插入数据吗?如果有了触发器,你可以直接在金额表录入数据,日志表会自动插入一条日志记录,当然,触发器不仅只有新增操作,还有更新和删除操作。

创建触发器

我们可以用如下的方式创建触发器

create trigger triggername triggertime triggerevent on tbname for each row triggerstmt

上面涉及到几个参数,我知道你有点懵逼,解释一下。

triggername:这个指的就是触发器的名字

triggertime:这个指的就是触发器触发时机,是 BEFORE 还是 AFTER

triggerevent: 这个指的就是触发器触发事件,一共有三种事件:INSERT、UPDATE 或者 DELETE

tbname:这个参数指的是触发器创建的表名,在哪个表上创建

triggerstmt: 触发器的程序体,也就是 SQL 语句

所以,可以创建六种触发器

BEFORE INSERT、AFTER INSERT、BEFORE UPDATE、AFTER UPDATE、BEFORE DELETE、AFTER DELETE

上面的 for each now 表示任何一条记录上的操作都会触发触发器。

下面我们通过一个例子来演示一下触发器的操作

我们还是用上面的 procuct 表做例子,我们创建一个 product_info 产品信息表。

create table product_info(p_info varchar(20));

然后我们创建一个 trigger

47 张图带你 MySQL 进阶!!!

我们在 product 表中插入一条数据

insert into product values(4,"pineapple",15.3);

我们进行 select 查询,可以看到现在 product 表中有四条数据

47 张图带你 MySQL 进阶!!!

我们没有向 product_info 表中插入数据,现在我们来看一下 product_info 表中,我们预想到是有数据的,具体来看下

47 张图带你 MySQL 进阶!!!

这条数据是什么时候插入的呢?我们在创建触发器 tg_pinfo 的时候插入了的这条数据。

删除触发器

触发器可以使用 drop 进行删除,具体删除语法如下

drop trigger tg_pinfo;

和删除表的语法是一样的

查看触发器

我们经常会查看触发器,可以通过执行 show triggers 命令查看触发器的状态、语法等信息。

另一种查询方式是查询表中的 information_schema.triggers 表,这个可以查询指定触发器的指定信息,操作起来方便很多

触发器的作用

在添加一条数据前,检查数据是否合理,例如检查邮件格式是否正确

删除数据后,相当于数据备份的作用

可以记录数据库的操作日志,也可以作为表的执行轨迹

注意:触发器的使用有两个限制

触发程序不能调用将数据返回客户端的存储程序。也不能使用 CALL 语句的动态 SQL 语句。

不能在触发器中开始和结束语句,例如 START TRANSACTION

47 张图带你 MySQL 进阶!!!

47 张图带你 MySQL 进阶!!!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wssjff.html