数据库MySQL/mariadb知识点——触发器

触发器

触发器:trigger,是指事先为某张表绑定一段代码,当表中的某些内容发生改变(增、删、改)的时候,系统会自动触发代码并执行。

触发器包含三个要素,分别为

  1. 事件类型:增删改,即insertdeleteupdate
  2. 触发时间:事件类型前和后,即beforeafter
  3. 触发对象:表中的每一条记录(行),即整张表

每张表只能拥有一种触发时间的一种事件类型的触发器,即每张表最多可以拥有 6 种触发器;即:BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER UPDATE、AFTER DELETE。

创建触发器

创建触发器语法如下

mysql CREATE [DEFINER = { user | CURRENT_USER }] TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_body

其中:

trigger_name:标识触发器名称,用户自行指定;
trigger_time:标识触发时机,取值为 BEFORE 或 AFTER;
trigger_event:标识触发事件,取值为 INSERT、UPDATE 或 DELETE;
tbl_name:标识建立触发器的表名,即在哪张表上建立触发器;
trigger_stmt:触发器程序体,可以是一句SQL语句,或者用 BEGIN 和 END 包含的多条语

查看触发器

和查看数据库(show databases;)查看表格(show tables;)一样,查看触发器的语法如下:

SHOW TRIGGERS;

删除触发器

和删除数据库、删除表格一样,删除触发器的语法如下:

DROP TRIGGER trigger_name;

示例

创建触发器,在向学生表INSERT数据时,学生数增加,删除学生信息时,学生数减少。

MariaDB [testdb]> CREATE TABLE students_info (id TINYINT(2) NOT NULL AUTO_INCREMENT,name VARCHAR(30) DEFAULT NULL,PRIMARY KEY(id));  #创建一张学生信息表
MariaDB [testdb]> CREATE TABLE students_count (stu_count TINYINT(2) DEFAULT 0);  #创建一张学生数量表
MariaDB [testdb]> INSERT INTO students_count VALUES(0);  #给个初识值0MariaDB [testdb]> CREATE TRIGGER trigger_students_count_insert-> AFTER INSERT-> ON students_info FOR EACH ROW-> UPDATE students_count SET stu_count=stu_count+1;
Query OK, 0 rows affected (0.00 sec)MariaDB [testdb]> CREATE TRIGGER trigger_students_count_delete-> AFTER DELETE-> ON students_info FOR EACH ROW-> UPDATE students_count SET stu_count=stu_count-1;
Query OK, 0 rows affected (0.01 sec)

  

MariaDB [testdb]> INSERT students_info(id,name) VALUES (1,'Tom'),(2,'Maria');
MariaDB [testdb]> SELECT * FROM students_info;
+----+-------+
| id | name  |
+----+-------+
|  1 | Tom   |
|  2 | Maria |
+----+-------+
MariaDB [testdb]> SELECT * FROM students_count;  #插入记录,触发事件,数量增加为2
+-----------+
| stu_count |
+-----------+
|         2 |
+-----------+
MariaDB [testdb]> DELETE FROM students_info WHERE id=1;
MariaDB [testdb]> SELECT * FROM students_info;
+----+-------+
| id | name  |
+----+-------+
|  2 | Maria |
+----+-------+
MariaDB [testdb]> SELECT * FROM students_count;  #删除记录,数量减1
+-----------+
| stu_count |
+-----------+
|         1 |
+-----------+

  

转载于:https://www.cnblogs.com/Gmiaomiao/p/9207464.html

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

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

相关文章

【前沿技术】2021九大技术趋势:规模化机器学习、「零信任」架构

来源:智能研究院《德勤2021年技术趋势》报告研究了疫情一年来对企业战略、运营和技术带来的连锁反应,论述了其重大发现:全球企业正在加速数字化战略转型,从而构建「韧性」、开创全新的经营模式。报告讨论了接下来18至24个月及以后…

Java项目打包成exe的详细教程

Java项目打包成exe的详细教程 把Java项目打包成exe共分为以下两步: 1、 利用Eclipse先把Java项目先打成jar包 2、 利用exe4j工具把jar包转成exe 这里以Java项目(ExeDemo)为例进行讲解 随便在一个位置新建一个文件夹,文件夹的名称也…

数学史上的哲学绝唱——无穷观与数学基础的争论

来源:《广西民族大学学报》2014年11月作者:郭龙先,黄永两千多年来,数学家们一直试图从少数公理出发,根据明确给出的演绎规则推导出其他数学定理,从而把整个数学构造成为一个严密的演绎大厦,然后…

Leetcode--141. 环形链表

给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 示例 1: 输入:head …

解读自动驾驶的2020:从硬件角度看,无人车商业化落地难在哪?

来源 :AI前线作者 :滴滴自动驾驶技术团队策划 :陈思「重点问题」什么是合适的无人驾驶车辆平台?复杂场景下的“无人驾驶”,传感器硬件系统还有哪些挑战?告别 demo 硬件系统后,下一个前装量产的必…

Leetcode--142. 环形链表Ⅱ

给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有…

他们提出了一个大胆的猜想:GWT(深度学习)→通用人工智能

来源:AI科技评论编译 :陈彩娴近日,有一篇发表在arXiv的论文“Deep Learning and the Global Workspace Theory”提出了一个大胆的猜想(或理论)。两位作者认为,当下的深度学习已经可以基于一个意识模型&…

科学史上那些盛极一时的“著名理论”是如何被攻破的?

《雅典学院》名画中的亚里士多德和柏拉图来源 :《自然》百年科学经典制版编辑: Morgan在科学发展的过程中,曾经涌现出不少盛极一时而后被证明是错误的理论。这些理论有的也许在今天看来悖谬荒诞,但是从整个科学发展的过程来看,它们仍然有其作…

AI在智能建筑中的应用和发展

来源:中研网图片来源:网络智能建筑诞生于二十世纪末,第一幢智能建筑于1984年在美国哈特福德 (Hartford)市建成。我国于90年代才起步,但迅猛发展势头令世人瞩目。目前,新技术、新产品在智能建筑中…

SpringBoot核心

1.基本配置 1.1入口类和SrpingBootApplication SpringBoot通常有一个名为*Application的入口类,入口类里有一个main方法,这个main方法就是一个标准的java应用的入口方法 。在main方法中使用SpringApplication.run,启动springboot项目。 其中EnablieAutoC…

grpc简单使用 java_gRPC学习记录(四)-官方Demo - Java 技术驿站-Java 技术驿站

了解proto3后,接下来看官方Demo作为训练,这里建议看一遍之后自己动手搭建出来,一方面巩固之前的知识,一方面是对整个流程更加熟悉.官方Demo地址: https://github.com/grpc/grpc-java例子是一个简单的路由映射的应用,它允许客户端获取路由特性的信息,生成…

冯端:漫谈物理学的过去、现在与未来

来源: 算法与数学之美撰文: 冯端 (南京大学物理系)“物理学的过去、现在和未来”是一个非常大而且重要的题目,也是一个非常难讲的题目,特别是涉及物理学的未来,结果往往是贻笑大方。这里以历史的透视为主线&#xff0c…

第四次博客

第四次博客 一、测试与正确性论证的比较 测试具有针对性,能从一些方面完美的展现出代码的正确性,但是它的验证度取决于样例的质量。 优点是方便,快捷,结果明显;缺点是可能不会覆盖到方方面面。 正确性论证能从所有的方…

院士论坛|李德仁:测绘遥感能为智能驾驶做什么? ——论测绘遥感与智能驾驶

来源: 中国测绘学会未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测;开展互联网(城市)云脑研究计划,构建互联网(城市)云脑技术和企业…

Spring Boot-springbootHelloword(一)

什么是springboot sprng家族一个全新的框架 简化我们应用程序的创建和开发的过程,使用默认配置简化了我们以前传统的配置 springboot的特性 能够快速创建spring程序能够使用java main方法启动内嵌的 tomcat 或者jetty服务器运行spring boot程序提供约定的starter p…

原创工作发表难之叶公好龙

来源:张志东科学网博客链接地址:http://blog.sciencenet.cn/blog-2344-1265601.html 最近,科学网上一个热点话题是原创工作发表难不难?以真傻为代表的认为原创工作发表难,以王立新为代表的认为原创工作发表不难。那么&…

java字符的输入流_Java:字节流和字符流(输入流和输出流)

InputStream是抽象基类,所以它不可以创建对象,但它可以用来“接口化编程”,因为大部分子类的函数基类都有定义,所以利用基类来调用函数。FileInputStream是用来读文件数据的流,所以它需要一个文件对象用来实例化&#…

任正非内部重磅发言:华为不可能简单学阿里、亚马逊

来源:券商中国辞旧迎新之际,华为创始人任正非此前在华为企业业务及云业务汇报会上的发言于华为心声社区曝光。任正非指出,华为企业业务要聚焦战略重点,继续做减法,收缩企业业务做战线,认真弄清楚做作战模型…

java8 迭代set集合_JavaSE(八)集合之Set

2.2、HashSet特点不能保证元素的排列顺序,顺序可能和添加的顺序不同,顺序也有可能发生变化。HashSetf不是同步的,如果多个线程同时来访问一个 HashSet,假设有两个或者两个以上线程同时修改了HashSet 集合时,则必须通过…

AI 发展方向大争论:混合AI ?强化学习 ?将实际知识和常识整合到AI中 ?

一个仿人机器人的延伸手。机器人常常使用强化学习来加以训练来源:云头条作者:Ben Dickson是一名软件工程师,还是探讨技术在如何解决和带来问题的TechTalks博客的创始人。2010年代对于AI界来说意义重大,这归功于深度学习领域取得了…