前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL触发器详解

MySQL触发器详解

作者头像
半月无霜
发布2023-03-03 15:01:23
6K0
发布2023-03-03 15:01:23
举报
文章被收录于专栏:半月无霜

MySQL触发器详解

一、介绍

大家应该都听过MySQL的触发器,它的概念如下

它是一种特殊的一种存储过程,当表数据发生了新增、更新、删除时,便触发这个存储过程。

由此,故而名为触发器。下面一起来看看触发器的使用吧!

二、语法

1)语法格式

代码语言:javascript
复制
-- 删除
drop trigger 触发器名;

-- 定义结束符号
delimiter $$

-- 创建
create trigger 触发器名 before|after insert|update|delete on 表名 for each row
begin
	执行语句
end$$

-- 定义结束符号
delimiter ;
  • 触发事件类型
    • insert:有数据新增时触发
    • update:有数据被修改时触发
    • delete:有数据被删除时触发
  • 执行顺序
    • before:在触发事件前执行语句
    • after:在触发事件后执行语句

在执行语句中,和正常的存储过程差不多,不过触发器多了两个存储过程没有的对象,分别是NEWOLDOLD:代表着更新,删除前的数据,可以通过OLD.字段名来获取以前的值 NEW:代表着新增,更新后的数据,可以通过NEW.字段名来获取以后的值 其中同上描述的,新增类型的触发器没有OLD,删除类型的触发器没有NEW,而更新触发器两者都有

好的,经过语法的介绍,直接进入实战;

2)示例

首先来一张用户表,需求很简单,如果年龄小于12岁时,将报错不允许操作

代码语言:javascript
复制
CREATE TABLE `sys_user_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` varchar(255) DEFAULT NULL COMMENT '姓名',
  `age` tinyint(4) DEFAULT NULL COMMENT '年龄',
  `gender` tinyint(1) DEFAULT NULL COMMENT '性别',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

那么,如何使用触发器完成这上面这个功能需求呢?具体触发器如下

代码语言:javascript
复制
DROP TRIGGER IF EXISTS `user_info_insert`;
DROP TRIGGER IF EXISTS `user_info_update`;

delimiter $$

CREATE TRIGGER `user_info_insert` AFTER INSERT ON `sys_user_info` FOR EACH ROW 
BEGIN
	IF NEW.age<12 THEN
		SIGNAL SQLSTATE 'BY000' SET MESSAGE_TEXT = '年龄不能低于12岁';
	END IF;
END$$

CREATE TRIGGER `user_info_update1` AFTER UPDATE ON `sys_user_info` FOR EACH ROW 
BEGIN
	IF NEW.age!=OLD.age and NEW.age<12 THEN 
		SIGNAL SQLSTATE 'BY000' SET MESSAGE_TEXT = '年龄不能低于12岁';
	END IF;
END$$

delimiter ;

创建完成后,我们查看效果

animation
animation

三、最后

虽然触发器有着自己的局限性,但从某一个角度上来说,它确实是一个好东西。

在我经历的这段时间,它可以完成以下这些实用功能

  • 表数据历史的收集,作为一个历史数据保存至其他历史表中。
  • 某些数据通过判断后,来确定一些状态字段的值。
  • 触发检测,是否达到预警,从而发送告警事件

触发器的功能也可以做到许多东西,关键看自己如何去进行使用,搭配代码,事半功倍!

我是半月,祝你幸福!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL触发器详解
    • 一、介绍
      • 二、语法
        • 1)语法格式
        • 2)示例
      • 三、最后
      相关产品与服务
      对象存储
      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档