首页 > 数据库 >MySQL触发器使用

MySQL触发器使用

时间:2025-01-22 19:53:46浏览次数:1  
标签:语句 触发器 name MySQL trigger 使用 执行 数据

触发器

触发器是一个特殊的存储过程,不同的是存储过程要用CALL来调用,而触发器不需要使用CALL

也不需要手工启动,只要当一个预定义的事件发生的时候,就会被MYSQL自动调用。 
触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。 
作用

  1. 触发器可通过数据库中的相关表实现级联更改;通过级联引用完整性约束可以更有效地执行这些更改。

  2. 触发器可以强制比用 CHECK 约束定义的约束更为复杂的约束。与 CHECK 约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。

  3. 触发器还可以强制执行业务规则

  4. 触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。

实际应用 
尽管触发器有很多优点,但是在实际的项目开发中,特别是OOP思想的深入,触发器的弊端也逐渐突显,主要:

1、过多的触发器使得数据逻辑变得复杂

2、数据操作比较隐含,不易进行调整修改

3、触发器的功能逐渐在代码逻辑或事务中替代实现,更符合OO思想。

创建触发器

create trigger语句用来创建一个触发器,触发器的作用是当表上有对应SQL语句发生时,则触发执行

触发器创建时需要指定对应的表名tbl_name

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 mysql> HELP CREATE TRIGGER; Name: 'CREATE TRIGGER' Description: Syntax: CREATE     [DEFINER = { user | CURRENT_USER }]     TRIGGER trigger_name     trigger_time trigger_event     ON 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     Definer关键词用来指定trigger的安全环境   Trigger_time指定触发器的执行时间, BEFORE和AFTER指定触发器在表中的每行数据修改前或者后执行 Trigger_event指定触发该触发器的具体事件     • INSERT当新的一行数据插入表中时触发,比如通过执行insert,loaddata,replace语句插入新数据     • UPDATE当表的一行数据被修改时触发,比如执行update语句时     • DELETE当表的一行数据被删除时触发,比如执行delete,replace语句时   当执行insert into … on duplicate key update语句时,当碰到重复行执行update时,则触发update下的触发器    从5.7.2版本开始,可以创建具有相同trigger_time和trigger_event的同一个表上的多个触发器,默认情况下按照创建的时间依次执行,通过指定FOLLOWS/PRECEDES改变执行顺序,即FOLLOWS时表示新创建的触发器后执PRECEDES则表示新触发器先执行   Trigger_body表示触发器触发之后要执行的一个或多个语句,在内部可以引用涉及表的字OLD.col_name表示行数据被修改或删除之前的字段数据, NEW.col_name表示行数据被插入或修改之后的字段数据

  

例:

查询触发器

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 mysql> select trigger_schema,trigger_name from information_schema.triggers; +----------------+----------------------------+ | trigger_schema | trigger_name               | +----------------+----------------------------+ | course         | simple_trigger             | | sys            | sys_config_insert_set_user | | sys            | sys_config_update_set_user | +----------------+----------------------------+ 3 rows in set (0.00 sec)   trigger_schema: 哪个库 trigger_name : 触发器的名字   sys 库下面的触发器是默认就有的   查看触发器的详细信息 show create trigger course.simple_trigger

  

删除触发器

1 2 3 4 5 6 7 8 mysql> help drop trigger; Name: 'DROP TRIGGER' Description: Syntax: DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name   • If exists短语用来避免删除不存在的触发器时引发报错 • 当你执行drop table时,表上的触发器也被drop掉了

标签:语句,触发器,name,MySQL,trigger,使用,执行,数据
From: https://www.cnblogs.com/shujuyr/p/18686699

相关文章

  • Xshell 7 绿色免安装版下载及使用教程
    Xshell是一款功能强大的终端模拟器,支持SSH1,SSH2,SFTP,TELNET,RLOGIN和SERIAL。通过提供业界先进的性能,Xshell包含了其他SSH客户端无法发现的功能和优势。xftp是一个基于MSwindows平台的功能强大的SFTP、FTP文件传输软件。使用了Xftp以后,MSwindows用户能安全地在UNIX/Linu......
  • 【Docker项目实战】使用Docker部署LinkWarden书签服务
    【Docker项目实战】使用Docker部署LinkWarden书签服务一、LinkWarden介绍1.1LinkWarden简介1.2主要特点1.3主要使用场景二、本次实践规划2.1本地环境规划2.2本次实践介绍三、本地环境检查3.1检查Docker服务状态3.2检查Docker版本3.3检查doc......
  • 【Golang/gRPC/Nacos】在golang中将gRPC和Nacos结合使用
    Nacos与gRPC前言关于这部分,前段时间我在看文档以及视频教程的时候,怎么都想不明白,到底为什么要用gRPC是什么,他在项目中应该充当什么样的角色?Nacos又是如何和他结合的?于是我就决定去看看一些小项目是如何实现的这个功能,现在将我最近学到的分享给大家。正文在正文开始之前......
  • failed: Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib
    mysql连接时报以下这个错误CannotconnecttoMySQL:DBIconnect('jiwei;host=;port=3306;mysql_read_default_group=client','root',...)failed:Authenticationplugin'caching_sha2_password'cannotbeloaded:/usr/lib64/mysql/plugin/caching......
  • VSCode使用之go语言配置
    时间:2025/1/22扩展:go目的:支持go语言,方便安装其他必备插件安装该扩展包后可以执行该扩展包提供的命令Go:Install/UpdateTools来进一步扩展go工具执行命令的窗口可以通过Ctrol+Shift+P调出点击后会出现很多选项,可以根据自己需要勾选然后点击确定,等待下载安装,一般情况下......
  • 分享一款WebSocket在线测试工具,使用简单方便
    ​WebSocket作为一种高效的双向通信技术,广泛应用于实时数据传输、在线游戏、金融交易等领域。然而,对于开发者和测试人员来说,确保WebSocket连接的稳定性和性能至关重要。这就是为什么我们需要一款可靠的WebSocket在线测试工具。今天,就让我们一起探索一款强大且便捷的工具——3M万能......
  • 《ESP32-S3使用指南—IDF版 V1.6》第三章 ESP32-S3基础知识
    第三章ESP32-S3基础知识1)实验平台:正点原子DNESP32S3开发板2)章节摘自【正点原子】ESP32-S3使用指南—IDF版V1.63)购买链接:https://detail.tmall.com/item.htm?&id=7684993426594)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/esp32/ATK-DNESP32S3.html5......
  • docker compose是什么?如何使用?
    一、什么是DockerCompose?DockerCompose是一个工具,用于定义和管理多容器的Docker应用。它允许你使用YAML文件来配置应用的服务、网络、卷等,然后用单个命令来启动和管理整个应用的多个容器。通过DockerCompose,你可以轻松地定义和部署一个由多个Docker容器组成的应用,而......
  • 手把手教会你Disruptor的常用使用场景!(含详细代码示例)
    Disruptor常见使用场景与代码示例1.引言上期介绍到Disruptor是一个高性能的无锁并发队列,适用于需要极低延迟和高吞吐量的应用场景。它通过环形缓冲区(RingBuffer)和高效的事件处理机制,显著减少了CPU缓存失效和上下文切换的开销。今天介绍Disruptor的几个常见使用场景:事件......
  • 【YashanDB知识库】私有maven使用崖山JDBC驱动
    本文内容来自YashanDB官网,原文内容请见https://www.yashandb.com/newsinfo/7281312.html?templateId=1718516将yashandb-jdbc-1.5.1.jar打包进mavan本地仓库mvninstall:install-file-Dfile=F:\developRE\yashan\dbeaver-for-yashandb-23.1-win32\win32\x86_64\dbeaver\config......