MySQL触发器详细教程与实战分析

本文详细介绍了MySQL触发器的概念、作用、创建要素和使用语法。通过实例展示了如何创建、查看和删除触发器,以及在订单与库存场景中的应用。讨论了触发器中的old和new对象,以及触发器在并发环境下的性能和可能的冲突问题,强调了在实际开发中谨慎使用触发器的原因。
摘要由CSDN通过智能技术生成


所有知识体系文章,GitHub已收录,欢迎老板们前来Star!

GitHub地址: https://github.com/Ziphtracks/JavaLearningmanual

搜索关注微信公众号“码出Offer”,送你学习福利资源!

MySQL触发器


一、什么是触发器

触发器(trigger)是MySQL提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(insert,delete, update)时就会激活它执行。简单理解为:你执行一条sql语句,这条sql语句的执行会自动去触发执行其他的sql语句。

二、触发器的作用

  • 可在写入数据表前,强制检验或转换数据。
  • 触发器发生错误时,异动的结果会被撤销。
  • 部分数据库管理系统可以针对数据定义语言(DDL)使用触发器,称为DDL触发器。
  • 可依照特定的情况,替换异动的指令 (INSTEAD OF)。

三、触发器创建的四要素

  • 监视地点(table)
  • 监视事件(insert、update、delete)
  • 触发时间(after、before)
  • 触发事件(insert、update、delete)

四、触发器的使用语法

语法:

before/after: 触发器是在增删改之前执行,还是之后执行

delete/insert/update: 触发器由哪些行为触发(增、删、改)

on 表名: 触发器监视哪张表的(增、删、改)操作

触发SQL代码块: 执行触发器包含的SQL语句

CREATE TRIGGER 触发器名
BEFORE|AFTER DELETE|INSERT|UPDATE
ON 表名 FOR EACH ROW
BEGIN
触发SQL代码块;
END;

注意: 触发器也是存储过程程序的一种,而触发器内部的执行SQL语句是可以多行操作的,所以在MySQL的存储过程程序中,要定义结束符。

如果MySQL存储过程不了解的小伙伴,可以参考此文面向MySQL存储过程编程,文章中详细讲解了MySQL存储过程的优势和语法等等,相信你会在其中得以收获。

# 设置MySQL执行结束标志,默认为;
delimiter //

五、触发器的基本使用

5.1 基本使用步骤

首先,我先展示一下创建的两张表,因为创建的表很简单,这里我没有提供库表操作的SQL命令。

tb_class

image-20200611205404311

employee

image-20200611205435284

其次,创建了一个含有update操作的存储过程

delimiter //
create procedure update_emp(in i int, in p int)
begin
    update employee set phone = p where id = i;
end //

再创建一个触发器

分析: 触发器名称为t1,触发时间为after,监视动作为update,监视表为employee表。汇总一起解释这个触发器就是:创建一个触发器名称为t1的触发器,触发器监视employee表执行update(更新)操作后,就开始执行触发器内部SQL语句update tb_class set num = num + 1 where id = 1;

简单来说就是一个监视一个表的增、删、改操作并设置操作前后时间,在设置时间的范围内对另外一个表进行其他操作。

如果你学到这里还是一知半解,后面我会讲解一个订单与库存的数据关系,到那时候你就会明白了!

delimiter //
# 创建触发器,触发器名称为t1
create trigger t1
	# 触发器执行在update操作之后
    after update
    # 监视employee表
    on employee
    for each row
begin
	# 触发执行的SQL语句
    update tb_class set num = num + 1 where id 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值