MySQL学习--触发器

本文介绍了MySQL触发器的基本概念,包括其定义和应用场景,如数据同步、条件约束和数据跟踪。详细阐述了触发器创建的四要素:监视地点、监视事件、触发时间和触发事件,并举例说明了触发器的创建和行变量的使用。此外,讨论了before和after触发时间的区别,以及MySQL仅支持的行级触发器的概念。
摘要由CSDN通过智能技术生成

触发器

触发器基本概念

触发器定义:是一类特殊的事务。可以监视某种数据操作(insert/update/delete)。并触发相关数据操作(insert/update/delete)。

触发器应用场景:

1.当向一张表中添加或删除记录时,需要在相关表中进行同步操作。比如,当一个订单产生时,订单所购的商品的库存量相应减少。

2.当表上某列数据的值与其他表中的数据有联系时。比如,当某客户进行欠款消费,可以在生成订单时通过设计触发器判断该客户的累计欠款是否超出了最木限度。

3.当需要对某张表进行跟踪时。比如,当有新订单产生时,需要及时通知相关人员进行处理,此时可以在订单表上设计添加触发器加以实现。

触发器创建语句四要素:

  • 1.监视地点(table)
  • 2.监视事件(insert/update/delete)
  • 3.触发时间(after/before)
  • 4.触发事件(insert/update/delete)

简单的触发器创建

mysql> delimiter $
mysql> create trigger t1
    -> after
    -> insert on ord
    -> for each row
    -> begin
    -> update goods set num=num-2 where gid=1;
    -> end$
Query OK, 0 rows affected (0.82 sec)

mysql> show triggers \G
*************************** 1. row ***************************
             Trigger: t1
               Event: INSERT
               Table: ord
           Statement: begin
update goods set num=num-2 where gid=1;
end
              Timing: AFTER
             Created: 2021-04-20 19:16:54.72
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
             Definer: root@localhost
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

行变量

  • insert:只有new变量

  • delete:只有old变量

  • update:既有old变量又有new变量

在这里插入图片描述
在这里插入图片描述

需求:

商品表:goods

订单表:ord

下一个订单,仓库存储就减少相应的数量

mysql> create trigger t2
    -> after insert on ord
    ->  for each row
    ->  begin
    ->  update goods set num = num-new.much where gid=new.gid;
    ->  end$
Query OK, 0 rows affected (0.49 sec)

mysql> drop trigger t1;
    -> $
Query OK, 0 rows affected (0.24 sec)

mysql> show triggers \G
*************************** 1. row ***************************
             Trigger: t2
               Event: INSERT
               Table: ord
           Statement: begin
 update goods set num = num-new.much where gid=new.gid;
 end
              Timing: AFTER
             Created: 2021-04-20 19:27:33.64
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
             Definer: root@localhost
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: utf8mb4_0900_ai_ci
1 row in set (0.10 sec)

mysql> select * from goods;
    -> $
+------+------+------+
| gid  | name | num  |
+------+------+------+
|    1 | cat  
  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

南岸青栀*

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

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

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

打赏作者

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

抵扣说明:

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

余额充值