MySQL触发器相关知识

news2024/11/17 6:24:47

1、什么是触发器

        触发器(trigger)是mysql的数据库对象之一,是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时(这些事件包括insert、update、delete三种),将调用该对象,即表的操作事件触发表上的触发器的执行。

2、触发器的作用

        触发器是由insert、update和delete等事件来触发某种特定操作。满足触发器的触发条件时,数据库系统就会执行触发器中定义的程序语句。这样做可以保证某些操作之间的一致性。例如,当学生表中增加了一个学生信息时,学生的总数就必须同时改变。可以在这里创建一个触发器,每次增加一个学生的记录,就执行一次计算学生总数的操作。这样就可以保证每次增加学生的记录后,学生总数是与记录数一致的。触发器触发的执行语句可能只有一个,也可能有多个。

3、触发器的特性?

  • 什么时候触发?before/after, 在insert、update、delete 之前或者之后?
  • 什么条件触发?insert还是update还是delete
  • 触发频率:针对每一行执行  for each row
  • 触发器定义在哪个表上? on Tablename

4、创建触发器

(1)创建只有一个执行语句的触发器

-- 1、创建只有一个执行语句的触发器
create trigger 触发器名 before | after 触发事件 
on 表名 for each row 
执行语句
  • 触发器名称,指要创建的自定义触发器的名字,通常使用trigger_ 或 tg_为前缀。
  • before和after参数指定了触发器执行的时间,“before”指在触发事件之前执行触发语句,after表示在触发事件之后执行触发语句。
  • 触发事件:指触发的条件,其中包括insert、update和delete;
  • “表名”参数指触发事件操作的表的名称;
  • for each row表示任何一条记录上的操作满足触发事件都会触发该触发器;
  • “执行语句”参数指触发器被触发后执行的程序。

例:在account表上创建一个触发器:当account表执行insert操作之前(before),先向user_info 表中写一条user_id = 99, realname = 'niuhehe'的数据

-- 创建触发器语句
mysql> create trigger tg_insert_account before insert on account
    -> for each row 
    -> insert into user_info set user_id = 99, realname = 'niuhehe'
    -> ;
Query OK, 0 rows affected (0.01 sec)

-- account表执行 insert 动作
mysql> 
mysql> insert into account(`name`, `balance`) values('niuhehe', 125);
Query OK, 1 row affected (0.01 sec)

-- 则user_info表自动写入了一条我们设置好的数据
mysql> select * from user_info;
+----+---------+----------+------+-----------+-----------+-----------+
| id | user_id | realname | age  | sheng     | shi       | xian      |
+----+---------+----------+------+-----------+-----------+-----------+
|  1 |       1 | 张三     |   15 | 山东省    | 菏泽市    | 牡丹区    |
|  5 |      99 | niuhehe  | NULL | NULL      | NULL      | NULL      |
+----+---------+----------+------+-----------+-----------+-----------+
5 rows in set (0.00 sec)

(2)创建有多个执行语句的触发器

create trigger 触发器名 before | after 触发事件
on 表名 for each row
begin
	执行语句列表
end
  • begin与end直接的“执行语句列表”参数表示需要执行的多个执行语句的内容。不同的执行语句之间用英文分号隔开。
  • 一般情况下,MySQL默认是以“;” 作为结束执行语句。在创建触发器过程中需要用到“;”。为了解决这个问题,可以用delimiter语句指定结束符号。如“delimiter &&”,可以将结束符号由默认的分号变成“&&”。当触发器创建完成后,可以用命令“delimiter;”来将结束符号再变会系统默认的“;”。

例:在account表上创建一个触发器:当此表执行update操作时,执行以下动作:

向p_user表中写一条 name = 'liuhaha' 的数据

向p_user_info表中写一条 realname = 'liuhaha'的数据

mysql> delimiter &&  -- 指定结束符号 为 &&
mysql> create trigger tg_account_update before update
    -> on account for each row
    -> begin
    -> insert into p_user set `name` = 'liuhaha';
    -> insert into p_user_info set realname = 'liuhaha';
    -> end
    -> &&
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;    -- 触发器创建语句完成后再指定回来
mysql> 

5、查看触发器

(1)通过 show triggers 查看所有触发器

-- 列出所有触发器
show triggers;

 (2)通过系统triggers表查看触发器

在MySQL中,所有触发器的定义都存在information_schema数据库下的triggers表中。查询triggers表,可以查看到数据库中所有触发器的详细信息。查询的语句如下:

select * from information_schema.triggers;

此语法显示了所有数据库中的触发器,我们可以通过指定字段指定条件来筛选我们需要的数据。

6、删除触发器

-- 删除触发器
drop trigger 触发器名称;

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

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

相关文章

2023年安装Flutter开发环境_在C盘空间占用空间

2023年安装Flutter开发环境,C盘空间还剩多少? 1:Flutter开发对磁盘空间的要求 2:其余日常辅助软件安装D盘(占用8GB) 3:消耗时间(3天–网络有时会中断)–【劝退提示】 安…

Hudi(12):Hudi集成Flink之sql-client方式

目录 0. 相关文章链接 1. 启动sql-client 1.1. 修改flink-conf.yaml配置 1.2. local模式 1.3. yarn-session模式 2. 插入数据 3. 查询数据 4. 更新数据 5. 流式插入 5.1. 创建测试表 5.2. 执行插入 5.3. 查看job 5.4. 查看job 5.5. 查看HDFS目录 5.6. 查询结果 …

行为型模式 - 解释器模式Interpreter

学习而来,代码是自己敲的。也有些自己的理解在里边,有问题希望大家指出。 模式的定义与特点 解释器模式(Interperter Pattern),给定一个语言,定义它的文法表示,并定义一个解释器,这个…

智引未来,深兰科技机器人家族首次亮相TechG

12月31日,首届上海国际消费电子技术展(简称TechG)在南京国际博览中心圆满落下帷幕。作为全球消费电子技术领域的顶级行业盛会,本届展会共吸引了来自全球的300余家企业出席,共计逾2万名专业人士到场参观。阿里巴巴、蚂蚁科技、海尔、科大讯飞、…

PyQt6快速入门-菜单与工具栏

菜单与工具栏 接下来我们将了解一些常见的用户界面元素,您可能在许多其他应用程序中都见过它们——工具栏和菜单。 我们还将介绍Qt 提供的用于最小化不同 UI 区域之间的重复的整洁系统 — QAction。 1、Toolbars 最常见的用户界面元素之一是工具栏。 工具栏是用于在应用程序…

【微服务】Nacos 账号权限体系

目录 一、背景 1、账号体系 2、账号实体映射 二、方案 1、Nacos 资源模型 2、Nacos 授权 resource 2.1、授权 resource 组成 2.2、不同级别授权资源组成 3、Nacos 授权 Opers 4、Nacos 具体权限定义 4.1、Opers 组成 4.2、具体实例 4.3、工程实现 三、RBAC 设计实…

IDEA使用Spring initializr 创建SpringBoot项目超时问题解决办法

1.问题描述 IDEA使用Spring initializr 创建SpringBoot项目时经常会出现连接超时的问题,报错提示如下 还有一个提示非常简短就是 connect timed out 总之问题都是一样,可能因为是外网所以有时候会出现连接问题,多试几次会成功,…

AutoScraper——爬虫神器

AutoScraper是一个自动化的爬虫工具,非常智能,而且使用简单便捷。AutoScraper 是使用 Python 实现的 Web 爬虫,兼容 Python 3,能快速且智能获取指定网站上的数据,在github上具有4.8K⭐️。github链接:https…

有哪些你看了以后大呼过瘾的计算机书籍?

推荐几本让程序员们爱不释手的经典书。 1、代码整洁之道 鲍勃大叔作品,程序员,汇聚编程数十年编程生涯的心得体会,阐释如何解决软件开发人员、项目经理及软件项目领导们所面临的棘手的问题。 本书提出一种观点:代码质量与其整洁…

Qt+C/C++文章小说人物关系分析

程序示例精选 QtC文章小说人物关系分析 如需安装运行环境或远程调试&#xff0c;见文章底部微信名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<QtC/C文章小说人物关系分析>>编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易…

浅谈未来跨境电商发展的新趋势?

从21世纪初&#xff0c;互联网在我国应运而生&#xff0c;并且在国家政策的倾斜和互联网的渗透下&#xff0c;结合互联网商业巨头对全球互联网产业的优化布局&#xff0c;互联网技术逐渐得到完善&#xff0c;伴随着近年来直播带货以及互联网电商的加持&#xff0c;我国的线上购…

Crack:dhtmlx JavaScript UI Libraries 商业企业版

dhtmlx JavaScript UI Libraries 企业版 包含Ω578867473&#xff1a; JS Gantt Chart JS Scheduler JS UI Widgets Library JS Diagram Library JS Kanban Board JS To Do List JS Event Calendar JS Spreadsheet JS Pivot Table JS File Uploader JS Rich Text Editor Gantt…

家庭库存管理系统Homebox

本文完成于 2022 年的 10 月&#xff0c; 最近正好有网友在找这方面的软件&#xff0c;就给翻出来了&#xff1b;Homebox 通过存储位置和标签两个维度来管理物品&#xff0c;非常简单易用&#xff0c;希望能满足要求&#xff1b; 什么是 Homebox &#xff1f; Homebox 是一个自…

TensorFlow和PyTorch的实际应用比较

TensorFlow和PyTorch是两个最受欢迎的开源深度学习框架&#xff0c;这两个框架都为构建和训练深度学习模型提供了广泛的功能&#xff0c;并已被研发社区广泛采用。但是作为用户&#xff0c;我们一直想知道哪种框架最适合我们自己特定项目&#xff0c;所以在本文与其他文章的特性…

我阳了,一针疫苗未打

12月31日凌晨两点&#xff0c;我被热醒&#xff0c;浑身湿透。身体发出强烈信号&#xff0c;本能地催促我赶紧喝水&#xff0c;再不喝&#xff0c;要炸。毫不犹豫地&#xff0c;我走进厨房&#xff0c;摁下电水壶&#xff0c;1.5L 水&#xff0c;90度。几杯水下肚&#xff0c;身…

2020年MathorCup高校数学建模挑战赛—大数据竞赛B题遥感图像地块分割与提取求解全过程文档及程序

2020年MathorCup高校数学建模挑战赛—大数据竞赛 B题 遥感图像地块分割与提取 原题再现&#xff1a; 耕地的数量和质量是保持农业可持续发展的关键&#xff0c;利用卫星遥感影像可以识别并提取耕地&#xff0c;并对耕地进行遥感制图&#xff0c;准确的耕地分布能够为国家决策…

聚观早报 | 蚂蚁集团调整股东结构;「快看点」2 月 6 日终止运营

点击蓝字 / 关注我们 今日要闻&#xff1a;蚂蚁集团调整股东结构&#xff1b;「快看点」2 月 6 日终止运营&#xff1b;Google 同意为隐私问题进行赔偿&#xff1b;苹果已取消 iPhone SE 4 发布&#xff1b;Lightyear 2 太阳能汽车发布 蚂蚁集团调整股东结构1 月 7 日&#xf…

从0到1完成一个Vue后台管理项目(八、Menu改造完善、子组件创建、配置路由)

往期 从0到1完成一个Vue后台管理项目&#xff08;一、创建项目&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;二、使用element-ui&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;三、使用SCSS/LESS&#xff0c;安装图标库&#xff09; 从0到1完成一个Vu…

javaweb-拦截器与监听器FilterListener

Filter&Listener 1&#xff0c;Filter 1.1 Filter概述 Filter 表示过滤器&#xff0c;是 JavaWeb 三大组件(Servlet、Filter、Listener)之一。 过滤器可以把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能。 如下图所示&#xff0c;浏览器可以访问服务器上的…

mybatisPlus3.5.2在NOT_NULL更新策略下自定义Mapper实现更新null值

版本 当前使用的mybatis plus版本如下 mybatis-plus-3.5.2.jar 默认更新配置 在这个更新策略下&#xff0c;调用mybatis基础的updateById等更新方法的时候会因为xml中的判断条件而更新不了null值&#xff0c;此时又不想修改全局的配置策略。 mybatis plus提供了 com.baomid…