MySQL入门教程-触发器

9.触发器

什么是触发器 触发器(trigger):监视某种情况,并进行某种操作,它的执行并不是程序调用,也不是手工启动,而是由事件来触发,例如:对一张表进行操作(插入,更新,删除)时,就会触发执行事先编辑好的若干条SQL语句。

触发器的特点与作用 触发器里面的sql语句是一个事务,具有原子性,要么全部执行,要么全部不执行。

创建语法解析
 CREATE[DEFINER = user]TRIGGER trigger_nametrigger_time trigger_eventON tbl_name FOR EACH ROW[trigger_order]trigger_body​
 trigger_time: { BEFORE | AFTER }

只触发器触发的时间节点,与紧随其后的 trigger_event: { INSERT | UPDATE | DELETE } 触发操作组合,表示在某个操作执行之前,或之后,需要调用触发器的逻辑

 trigger_order: { FOLLOWS | PRECEDES } other_trigger_name

指这个触发器在触发的时候,与其他的触发器的联动效果。如,我们当前创建的 T1 在触发之前,需要先使用另一个已有的触发器 T2,那么这段的声明就是 PRECEDES T2;我们日常操作中基本不会有联动其他触发器的场景,因此这一段直接可以 省略

 trigger_body

触发器的主体部分。如果有多个操作,即一个 sql 无法完成,那么需要使用 begin... end 语句块将多个操作的 sql 包裹起来

注意项

一、触发器只允许在原始表上创建,即不能在临时表和视图上创建

二、触发器只能绑定到当前 DB 的表上。如果尝试在 DB1 中为 DB2.tab_name 创建触发器时,控制台会报错:**[Err] 1435 - Trigger in wrong schema**

三、触发器的主体部分,如果因多个 sql 操作需要使用 **begin... end** 语句块包裹,那么,记得在 **begin** 之后重命名 mysql 的语句分隔符,在 **end** 之前使用自己重命名的结束符作为结尾!!!

因为 mysql 默认都是以分号结尾,如果我们不重命名语句分隔符,那么 begin end 中只有第一条 sql 生效,剩下的都会忽略,从而执行的结果出乎我们的预期

删除触发器

 DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name

[if exists] 是可选的,表示会删除指定的并且存在的触发器;要是不存在,也不会报错

[schema_name.] 触发器所在的 DB 库,如果不指定,就会删除当前库下的这个触发器

查看触发器

我们最习惯的写法就是,第一步先删除目标触发器,第二步就是创建自己需要的触发器,sql 如下:

 drop trigger if exists myTrigger;create trigger myTrigger......

但是,如果我们上来就这么操作,或许会不小心删除已经在运行的同名触发器!!

因此,在触发器创建之前,我们需要确认命名是否被占用,有两个方法:

一、查看当前 DB 中的全部触发器

 show TRIGGERS;

img

二、从系统内置 DB 的 **triggers** 表中查询全部触发器

 SELECT *from information_schema.`TRIGGERS`

img

我们可以通过 where 增加对字段 trigger_name 的条件过滤

一个完整的创建触发器示例:

 ​create trigger  tri_abc after inserton grade for each rowbeginselect '插入成功' into @abc;endselect @abc;    -- 显示 nullinsert into grade(name) values('测试触发器');   --插入数据select @abc;    -- 显示  插入成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/585232.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跨进程通信 macOS XPC 创建实例

一:简介 XPC 是 macOS 里苹果官方比较推荐和安全的的进程间通信机制。 集成流程简单,但是比较绕。 主要需要集成 XPC Server 这个模块,这个模块最终会被 apple 的根进程 launchd 管理和以独立进程的方法唤起和关闭, 我们主app 进…

JNPF开发平台--初体验

这一两年低代码的概念很流行,我也在网上了解体验了一番。 目前低代码主要分为两种,第一种是与云平台绑定的低代码,在云平台上开发,直接发布到云平台;第二种是低代码框架,低代码项目,这种比较流行…

C# 使用ZXing.Net生成二维码和条码

写在前面 条码生成是一个经常需要处理的功能,本文介绍一个条码处理类库,ZXing用Java实现的多种格式的一维二维条码图像处理库,而ZXing.Net是其.Net版本的实现。 在WinForm下使用该类库需要从NuGet安装两个组件: ZXing.Net ZXing…

当钉钉宜搭有销售单据或客户审批时,自动同步到畅捷通T+Cloud,赋能企业部门之间的业务流程自动化

1 场景描述 随着数字化转型,对于大规模的企业来说,都会选择低代码系统来搭建内部流程来提高公司的管理效率,例如使用钉钉宜搭作为企业的数据库,用来存储客户、供应商、单据等数据。也会使用畅捷通TCloud作为ERP系统解决管理财务、…

Vue - 表单输入绑定详解

Vue.js 表单输入绑定详解 在Web开发中,表单是用户与应用程序交互的重要方式之一。Vue.js 提供了强大的表单输入绑定机制,使得在处理用户输入时变得更加简洁和高效。本篇博客将深入探讨 Vue.js 中表单输入绑定的各种用法,包括文本输入、多行文…

type 和 interface的异同

// 使用type定义一个类型 type Person {name: string;age: number; }// 使用interface定义一个类型 interface Animal {name: string;age: number; }// 使用type定义一个函数签名 type Add (a: number, b: number) > number;// 使用interface定义一个函数签名 interface S…

【python】可变变量与不可变变量

不可变类型(如整数和字符串) 当您创建一个不可变对象(如整数、字符串)时,Python实际上是将这个值存储在内存中的某个位置,并将变量名指向这个值。例如: lens 10 count lens在这种情况下&…

Github 2023-12-30 开源项目日报 Top10

根据Github Trendings的统计,今日(2023-12-30统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目4JavaScript项目2C项目1Python项目1Java项目1HTML项目1Dart项目1非开发语言项目1 令人惊叹的 …

2核2G3M服务器上传速度多少?以阿里云和腾讯云为例

2核2G3M服务器上传速度多少?上传是按10M带宽算,上传速度是1280KB/秒,即1.25M/秒;下载速度按3M带宽计算,下载速度是384KB/秒。本文是以阿里云为例的,阿里云服务器当公网带宽小于10M及10M以下时,上…

【51单片机系列】DS1302时钟模块扩展实验之与EEPROM结合使用只进行一次初始化工作

本文是关于时钟芯片DS1302的扩展实验。 文章目录 一、实验分析二、proteus仿真原理图三、软件设计及结果 本实验实现的目的:利用AT24C02掉电不丢失的功能,存储数据用来辨别DS1302时钟是否已经初始化,如果初始化就不执行DS1302初始化函数。 一…

【全网首发】洛谷P2678 [NOIP2015 提高组] 跳石头

Everyday English You don’t become what you want; you become whatyou believe. —Oprah Winfrey 你不是成为你想要的,你成为你所相信的。 洛谷P2678 [NOIP2015 提高组] 跳石头 题目描述 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔…

arduino esp32连接阿里云物联网平台,上传和请求数据的示例代码

要在Arduino ESP32上连接到阿里云物联网平台&#xff0c;并上传和请求数据&#xff0c;您可以使用 PubSubClient 库和 WiFi.h 库来实现。以下是一个示例代码&#xff0c;演示了如何使用MQTT协议将数据上传到阿里云物联网平台&#xff0c;并从平台上请求数据。 #include <Wi…

ansible_角色的使用

本章主要介绍ansible中角色的使用 了解什么是角色独立地写一个角色使用角色系统自带角色地使用 1.了解角色 正常情况下&#xff0c;配置一个服务如 apache时&#xff0c;要做一系列的操作:安装、拷贝、启动服务等。如果要在不同的机器上重复配置此服务&#xff0c;需要重新执…

新品出击 | 软网关BLIoTLink免费发布

新品出击|软网关BLIoTLink免费发布 BLIoTLink是一款免费的物联网协议转换软件&#xff0c;可以部署在任何基于Linux OS的系统&#xff08;Linux、Debian、Ubuntu、FreeRTOS、RT-Thread&#xff09;中&#xff0c;使用灵活&#xff0c;可以实现数据的采集以及接入网络平台。 BL…

ssm基于JavaEE的智能实时疫情监管服务平台的设计与实现+jsp论文

摘 要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜爱。本次开发一套智能实时疫情监管服务平台有管…

20231229 SQL基础50题打卡

20231229 SQL基础50题打卡 1661. 每台机器的进程平均运行时间 表: Activity ------------------------- | Column Name | Type | ------------------------- | machine_id | int | | process_id | int | | activity_type | enum | | timestamp …

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《面向平稳氢气需求的综合制氢系统鲁棒优化配置方法》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主的专栏栏目《论文与完整程序》 这个标题涉及到针对平稳氢气需求的综合制氢系统鲁棒优化配置方法。让我们逐步解读这个标题的关键要素&#xff1a; 面向平稳氢气需求&#xff1a; 这部分指…

【开题报告】基于SpringBoot的茶文化宣传网站设计与实现

1.研究背景和意义 1.1研究背景 茶文化是中国传统文化的重要组成部分&#xff0c;具有悠久的历史和丰富的内涵。茶文化不仅是一种饮食文化&#xff0c;更是一种生活方式和精神追求。然而&#xff0c;在当今快节奏的生活中&#xff0c;茶文化逐渐被人们所忽视。为了加强对茶文化…

k8s之kudeadm

kubeadm来快速的搭建一个k8s的集群&#xff1a; 二进制搭建适合大集群&#xff0c;50台以上主机 kubeadm更适合中小企业的业务集群 master&#xff1a;192.168.233.91 docker kubelet lubeadm kubectl flannel node1:192.168.233.92 docker kubelet lubeadm kubectl flannel…

Gin 源码深度解析及实现

介绍 什么是 gin &#xff1f; 一个轻量级高性能 HTTP Web 框架。 Introduction | Gin Web Framework (gin-gonic.com) Gin 是一个用 Go (Golang) 编写的 HTTP Web 框架。 它具有类似 Martini 的 API&#xff0c;但性能比 Martini 快 40 倍。 为什么使用 gin &#xff1f; In…