【mysql基础系列十八】触发器

xiaoxiao2021-02-28  21

基本概念

触发器(trigger)是一种特殊类型的存储过程。它主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。

本质:是一种非常接近与js中的事件的知识。提前给某张表的所有记录(行)绑定一段代码,如果该行的操作满足条件(触发前置条件),这段代码提前准备好的代码就会自动执行。

那么它有什么作用呢?

1、可以在写入数据表前,强制检验或转换数据。(保证数据安全)

2、触发器发生错误时,异动会被撤销。(触发器执行错误,前面用户已经执行成功的操作也会被插销:事务安全)

3、部分数据库管理系统可以针对数据定义语言使用触发器(称为:DDL触发器)

4、可依照特定情况替换异动指令(mysql暂不支持

触发器优缺点

优点:

    1、可通过数据库中的相关表实现级联操作。

    2、保证数据安全,可进行安全校验。

缺点:

    1、对触发器过分依赖,势必会影响数据库的结构,同时增加了维护复杂程度。

    2、造成数据在程序层面不可控。

基本语法

1、创建触发器

delimiter $$ create trigger 触发器名 触发时机 触发事件 on 表 for each row begin 执行内容 end $$ delimiter ;

触发对象:触发器绑定的实质是表中的所有行,因此当每一行发生变化时,就会触发触发器。

触发时机:每张表中对应的行都会有不同的状态,当SQL指令发生时,都会令行中数据发生改变,每一行总会有两种状态(数据操作前before、数据操作后after)。

触发事件:mysql中触发器针对的目标是数据发生改变,对应的操作只有写操作(增删改)

注意:一张表中每一个触发时机绑定的触发事件对应的触发器类型只能有一个,最多只能有6个触发器(before insert、after insert、before update、after update、before delete、after delete)。

2、查看触发器

方式一:查看全部触发器

show triggers;

方式二:查看触发器的创建语句

show create trigger 触发器名;

3、执行触发器

让触发器指定的表中,对应的时机发生对应的操作即可。

4、删除触发器

drop trigger 触发器名;

应用

记录关键字:new、old

触发器针对的数数据表中每条记录(行),每行在数据操作前后都一个对应状态,触发器在执行之前就将对应状态获取到了,将没有操作之前的状态(数据)都保存到old关键字中,将操作后的状态(数据)都保存到new中。

因此,我们可以通过old和new来获取绑定表的对应的记录数据。用法如下:

关键字.字段名;

注意:insert操作,没有old。delete没有new。

创建触发器:商品自动扣除

验证:

创建触发器:当库存不足,下单失败

验证:

转载请注明原文地址: https://www.6miu.com/read-2602150.html

最新回复(0)